我有一个函数返回调用此函数的对象的修改副本。我经常做这样的事情:当功能结果未分配给变量时显示警告
obj = obj.Foo(param);
不要问为什么,我只是不得不这样做。但有时我(和其他人)忘了分配函数的结果,这样做:
obj.Foo(param);
其反复导致费时调试。
当函数结果未被赋值为变量时,是否有任何显示警告或错误的方法,当函数结果未被赋值为 ?或者其他建议如何解决这个问题?
我有一个函数返回调用此函数的对象的修改副本。我经常做这样的事情:当功能结果未分配给变量时显示警告
obj = obj.Foo(param);
不要问为什么,我只是不得不这样做。但有时我(和其他人)忘了分配函数的结果,这样做:
obj.Foo(param);
其反复导致费时调试。
当函数结果未被赋值为变量时,是否有任何显示警告或错误的方法,当函数结果未被赋值为 ?或者其他建议如何解决这个问题?
这是完全合法的,往往需要不分配返回参数所以这将是错误的,有这方面的警告。 Henrik's答案使用out
参数是我也建议,以确保每次分配结果。
您可以启用visual studio warings。
你甚至可以自定义要应用规则。
你应该看到警告的情况下,你没有的功能分配给一个变量
,你也可以决定治疗华林视为错误
例子:
public static class MyClass
{
public static string GetStr()
{
return "";
}
public static void Main()
{
GetStr();
}
}
不是所有的VS版本,btw ... –
对于旧版本你可以使用如下: http:// msdn .microsoft.com/en-us/library/3y20cc1z%28v = VS.80%29.aspx –
不适用所有版本?我使用没有“代码分析”选项卡的VS 2008 Express。我找不到任何类似的东西。 – Grzes
我无法评论答案,缺乏stackoverflow学分。但是我同意克里斯的观点,这是完全合法的,通常不希望分配从方法返回的值。偶尔也不合时宜。例如
public static int Square(this int myValue)
{
return myValue * myValue;
}
很明显,调用这个方法时不分配它可能是一个错误。我认为创建一个代码分析规则,每次你没有分配价值时都会发出警告,因为Massimiliano建议的规则会比根本没有规则更糟。在这种情况下,它会很高兴能够为一个属性应用到方法...
[MustAssign]
public static int Square...
您可以创建一个规则,为的Massimiliano建议,但只有调用报警时,该方法被装饰与属性和从该方法返回的值未分配。不是一个微不足道的练习。
您可以使用Resharper来解决此问题;你需要与[Pure]
属性来装饰你的方法:
[Pure]
public static IList<T> RemoveItem<T>(this IEnumerable<T> thisList, T item)
{
var list = thisList.ToList();
list.Remove(item);
return list;
}
那么当你调用它不分配的返回值,您将看到:
的[Pure]
属性在Resharpers数据注释定义:您需要将课程复制到您的项目中,以便您可以参考它们(许多非常有用的其他注释)
“不要问为什么。”别担心!给定的代码片段表明了不可变的编码风格(不是说这就是你使用的)。例如,如果您正在修改“DateTime”变量,则会使用相同的样式。 'date = date.AddDays(1);' –
解决这个问题的方法不是首先犯错。我们都这样做,但这是唯一的答案。 –
显然[ReSharper 6](http://www.jetbrains.com/resharper/whatsnew/)有一个*“不使用纯方法的返回值”警告。 (我只在v5上,所以不能测试这个警告会适用于你的情况;我认为它可能会。) – LukeH