5

静的に正しいことがわかっているケースを処理するために、リシャーパー コード インスペクション/アノテーションを拡張することは可能ですか?

たとえば、次のような特定の条件を満たすことがわかっている効用関数があります。

    static public bool IsValid(double? d)
    {
        return d != null && IsValid(d.Value);
    }
    static public bool IsValid(double d)
    {
        return !Double.IsNaN(d) && !Double.IsInfinity(d);
    }

したがって、これによりnullableに値が含まれることが保証され、「Possible System.InvalidOperationException」インスペクションが次のようなものに対して起動しないようにしたいと思います。

    if (Utils.IsValid(nullableValue))
    {
        DoSomethingWith(nullableValue.Value);
    }

確かにインスペクションなどを抑制することはできますが、静的型付けを拡張して、これが実際に値が null 不可であることを保証することを示すことは可能ですか?

(関連するが過度に一般的な質問は、それを処理する可能性のある resharper の代わりに別の静的型付けチェックを使用する必要があると思いますが、過度に広範になることを恐れません!)

4

1 に答える 1

5

Daniel の提案によると、resharper は、検査を支援するために多くの注釈をサポートしています。

具体的には、ドキュメントを介して、ここで探しているのは次のようなものです。

    [ContractAnnotation("d:null => false")]
    static public bool IsValid(double? d)
    {
        return d != null && IsValid(d.Value);
    }

これは完璧に機能し、静的チェックは美しく機能します。

そのリシャーパーが大好き!

于 2013-04-26T18:32:59.173 に答える