0

カスタム構成セクション(System.Configuration.ConfigurationSectionを継承)を作成していますが、NullableintであるConfigurationPropertyの値の検証を行う必要があるかどうか疑問に思っています。つまり、これを行う必要がありますか?

[ConfigurationProperty("NullableInt", IsRequired = true)]
public int? NullableInt
{
    get 
    {
        return String.IsNullOrEmpty(Convert.ToString(this["NullableInt"]))
                    ? (int?) null
                    : Convert.ToInt32(this["NullableInt"]);
    }
    set
    {
        this["NullableInt"] = value.HasValue ? Convert.ToString(value) : "";
    }
}

または、次のようなことを行うことはできますか?

[ConfigurationProperty("NullableInt", IsRequired = true)]
public int? NullableInt
{
    get{ return Convert.ToInt32(this["NullableInt"]); }
    set{ this["NullableInt"] = Convert.ToString(value); }
}

それとも、一緒にもっと良い方法がありますか?

前もって感謝します。

4

2 に答える 2

1

最初のものはより完全な答えです。

2つ目は多くの場合正常に機能しますが、エッジケースでは失敗します。このようなセクションを作成するときは、プロパティの単純な不変条件を確認する必要があります。つまり、intのすべての値について次のことが当てはまりますか?

int? v1 = GetSomeNullableIntValue();
obj.NullableInt = v1;
int? v2 = obj.NullableInt;
bool equal = v1 == v2;  // Must be true

2番目の例では、int?のnull値をそのように保証していません。どのようにnullintを考えますか?このシナリオで表されますか?null整数を渡しますか?セットの値がスローされるため、コレクションに追加することはできません。同様に、それがnullまたはString.Emptyとして構成に格納されていると仮定すると、null intとして再び返されることはありませんか?

于 2009-08-04T15:33:27.907 に答える
1

そうですね、Convert.ToInt32は、値がnullの場合は0を返し、式が数値でない場合は例外をスローします。そうです、検証が必要です。-特に、プロパティが0ではなくnullに対してnullを返すようにしたいため(これは、前に指摘したように、Convert.ToInt32がnullに対して返すものです)

また、Convert.ToInt32()に非常に似ているが、nullを解析しようとするとArgumentNullExceptionをスローするInt32.Parse()関数を指摘すると便利な場合があります。これは、Convert.ToInt32とInt32.Parse()

于 2009-08-04T15:33:47.983 に答える