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

4

0 に答える 0