プロパティセッターからスローする例外は何ですか? 質問する

プロパティセッターからスローする例外は何ですか? 質問する

データがデータベースにリンクされているため、最大長要件を持つ文字列プロパティがあります。呼び出し元がこの長さを超える文字列を設定しようとした場合、どのような例外をスローする必要がありますか?

たとえば、次の C# コード:

public string MyProperty
{
    get
    {
        return _MyBackingField;
    }
    set
    {
        if (value.Length > 100)
            throw new FooException("MyProperty has a maximum length of 100.");

        _MyBackingField = value;
    }
}

検討しましたArgumentExceptionが、それは適切ではないようです。技術的にはは関数なMyProperty_set(string value)ので、 のケースをArgumentException作成できますが、消費者の目には関数として呼び出されておらず、代入演算子の右側にあります。

この質問は、おそらくプロパティ セッターで実行されるあらゆる種類のデータ検証を含めるように拡張することもできますが、私は上記のケースに特に興味があります。

ベストアンサー1

Reflector を使用して mscorlib.dll を調べてください。System.String.StringBuilder.Capacity などの同様の状況では、Microsoft は次のような ArgumentOutOfRangeException() を使用します。

public int PropertyA
{
    get
    {
        return //etc...
    }
    set
    {
        if (condition == true)
        {
            throw new ArgumentOutOfRangeException("value", "/* etc... */");
        }
        // ... etc
    }
}

おすすめ記事