1

JetBrains 注释:

表示方法不进行任何可观察到的状态更改。与 System.Diagnostics.Contracts.PureAttribute 相同

微软代码合同:

表示一个类型或方法是纯的,也就是说,它不会进行任何可见的状态更改。

使用原始类型操作时,很容易知道您的方法是否是纯函数。

但是考虑这种情况:

public class Program
{
    public static void Main()
    {
        var dodgy = new DodgyClass();

        string.Format("{0}", dodgy);
    }
}

public class DodgyClass
{
    public int State = 0;

    public override string ToString()
    {
        State = new Random().Next();
        return State.ToString();
    }
}

ReSharper 告诉我“未使用纯方法的返回值”,这显然是不正确的,因为状态确实会以一种非常明显的方式发生变化。当然,除非他们的意思是任何静态方法总是纯的?否则,没有一个 LINQ 扩展方法是纯的,因为我可以在覆盖 GetEnumerator() 时进行各种状态操作。

4

0 回答 0