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