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は、「純粋なメソッドの戻り値は使用されていません」と言っていますが、これは明らかに正しくありません。状態が変化し、非常に目に見える方法で変化するからです。もちろん、静的メソッドが常に純粋であることを意味しない限り? それ以外の場合、GetEnumerator() をオーバーライドするときにあらゆる種類の状態操作を実行できるため、LINQ 拡張メソッドはどれも純粋ではありません。