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() 时进行各种状态操作。