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

时间:2011-08-02 13:51:46

标签: c# function

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

obj = obj.Foo(param);

不要问为什么,我只需要。但有时我(和其他人)忘记分配功能结果,这样做:

obj.Foo(param);

这反复导致耗时的贬值。

每次未分配功能结果时,有没有办法显示警告或错误 变量?或者其他任何建议如何解决这个问题?

5 个答案:

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

然后当你调用它而不指定返回值时,你会看到:

enter image description here

Resharpers Data Annotations中定义了[Pure]属性:您需要将类复制到项目中以便引用它们(许多非常有用的其他注释)

enter image description here

答案 2 :(得分:2)

完全合法且通常不希望分配返回参数,因此对它进行警告是错误的。 Henrik's使用out参数的答案也是我建议的,以确保每次都分配结果。

答案 3 :(得分:2)

你可以启用visual studio warings。

enter image description here

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

如果您没有将函数分配给变量

,则应该看到警告

你也可以决定将waring视为错误

示例:

  public static class MyClass
    {

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

enter image description here

enter image description here

答案 4 :(得分:0)

我无法评论答案,缺乏stackoverflow信用。但我同意克里斯的观点,认为这是完全合法的,并且通常不希望分配从方法返回的值。它偶尔也不可取。 e.g。

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

很明显,调用此方法而不指定它可能是一个错误。我认为创建一个代码分析规则,每当你没有像Massimiliano所建议的那样分配一个值时会发出警告会比没有规则更糟糕。在这种情况下,能够将属性应用于方法...

[MustAssign]
public static int Square...

您可以像Massimiliano建议的那样创建规则,但仅在使用该属性装饰方法时才调用警告,并且未分配从方法返回的值。虽然不是一项微不足道的练习。