2011-08-02 56 views
5

我有一个函数返回调用此函数的对象的修改副本。我经常做这样的事情:当功能结果未分配给变量时显示警告

obj = obj.Foo(param); 

不要问为什么,我只是不得不这样做。但有时我(和其他人)忘了分配函数的结果,这样做:

obj.Foo(param); 

其反复导致费时调试。

当函数结果未被赋值为变量时,是否有任何显示警告或错误的方法,当函数结果未被赋值为 ?或者其他建议如何解决这个问题?

+1

“不要问为什么。”别担心!给定的代码片段表明了不可变的编码风格(不是说这就是你使用的)。例如,如果您正在修改“DateTime”变量,则会使用相同的样式。 'date = date.AddDays(1);' –

+2

解决这个问题的方法不是首先犯错。我们都这样做,但这是唯一的答案。 –

+1

显然[ReSharper 6](http://www.jetbrains.com/resharper/whatsnew/)有一个*“不使用纯方法的返回值”警告。 (我只在v5上,所以不能测试这个警告会适用于你的情况;我认为它可能会。) – LukeH

回答

4

你可以使用一个out参数,因此调用看起来像这样:

obj.Foo(param, out obj); 
+6

这会破坏编写像'obj = obj.Foo(param)这样的语句的可能性。 .Bar(parem).Baz(parum);' – Atreys

+0

我已将此解决方案考虑在内。我不使用上面的链条,但我不确定我永远不会使用它们。我也在寻找更复杂的东西:D 你说服我这个方法:) – Grzes

2

这是完全合法的,往往需要不分配返回参数所以这将是错误的,有这方面的警告。 Henrik's答案使用out参数是我也建议,以确保每次分配结果。

2

您可以启用visual studio warings。

enter image description here

你甚至可以自定义要应用规则。

你应该看到警告的情况下,你没有的功能分配给一个变量

,你也可以决定治疗华林视为错误

例子:

public static class MyClass 
    { 

     public static string GetStr() 
     { 
      return ""; 
     } 
     public static void Main() 
     { 
      GetStr(); 
     } 
    } 

enter image description here

enter image description here

+0

不是所有的VS版本,btw ... –

+0

对于旧版本你可以使用如下: http:// msdn .microsoft.com/en-us/library/3y20cc1z%28v = VS.80%29.aspx –

+0

不适用所有版本?我使用没有“代码分析”选项卡的VS 2008 Express。我找不到任何类似的东西。 – Grzes

0

我无法评论答案,缺乏stackoverflow学分。但是我同意克里斯的观点,这是完全合法的,通常不希望分配从方法返回的值。偶尔也不合时宜。例如

public static int Square(this int myValue) 
{ 
    return myValue * myValue; 
} 

很明显,调用这个方法时不分配它可能是一个错误。我认为创建一个代码分析规则,每次你没有分配价值时都会发出警告,因为Massimiliano建议的规则会比根本没有规则更糟。在这种情况下,它会很高兴能够为一个属性应用到方法...

[MustAssign] 
public static int Square... 

您可以创建一个规则,为的Massimiliano建议,但只有调用报警时,该方法被装饰与属性和从该方法返回的值未分配。不是一个微不足道的练习。

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; 
} 

那么当你调用它不分配的返回值,您将看到:

enter image description here

[Pure]属性在Resharpers数据注释定义:您需要将课程复制到您的项目中,以便您可以参考它们(许多非常有用的其他注释)

enter image description here