当函数结果未分配给变量时显示警告
我有一个函数返回调用此函数的对象的修改副本。 我经常这样做:
obj = obj.Foo(param);
不要问为什么,我只需要。 但有时我(和其他人)忘记分配function结果,这样做:
obj.Foo(param);
这反复导致耗时的贬值。
每次函数结果未分配给变量时,有没有办法显示警告或错误? 或者任何其他建议如何解决这个问题?
您可以使用out参数,因此调用将如下所示:
obj.Foo(param, out obj);
您可以使用Resharper来协助解决此问题; 你需要使用[Pure]
属性来装饰你的方法:
[Pure] public static IList RemoveItem (this IEnumerable thisList, T item) { var list = thisList.ToList(); list.Remove(item); return list; }
然后当你调用它而不指定返回值时,你会看到:
[Pure]
属性在Resharpers Data Annotations中定义:您需要将类复制到项目中以便引用它们(许多非常有用的其他注释)
这是完全合法的,并且通常不希望分配返回参数,因此对它进行警告是错误的。 Henrik对使用out
参数的回答也是我建议的,以确保每次都分配结果。
你可以启用visual studio warings。
您甚至可以自定义要应用的规则。
如果不将函数赋值给变量,则应该看到警告
你也可以决定将waring视为错误
例:
public static class MyClass { public static string GetStr() { return ""; } public static void Main() { GetStr(); } }
我无法评论答案,缺乏stackoverflow信用。 但我同意Chris的观点,认为这是完全合法的,并且通常不希望分配从方法返回的值。 它偶尔也不可取。 例如
public static int Square(this int myValue) { return myValue * myValue; }
很明显,调用此方法而不指定它可能是一个错误。 我认为创建一个代码分析规则,每次你没有按照Massimiliano的建议分配值时会发出警告会比没有规则更糟糕。 在这种情况下,能够将属性应用于方法会很好…
[MustAssign] public static int Square...
您可以像Massimiliano建议的那样创建规则,但只在方法使用属性装饰并且未分配从方法返回的值时才调用警告。 虽然不是一个微不足道的练习。