当函数结果未分配给变量时显示警告

我有一个函数返回调用此函数的对象的修改副本。 我经常这样做:

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建议的那样创建规则,但只在方法使用属性装饰并且未分配从方法返回的值时才调用警告。 虽然不是一个微不足道的练习。