3

次のプロパティを持つカスタム構成セクションを作成しました。

private const string UseMediaServerKey = "useMediaServer";
[ConfigurationProperty(UseMediaServerKey, IsRequired = false, DefaultValue = false)]
public bool UseMediaServer
{
    get { return bool.Parse(this[UseMediaServerKey] as string); }
    set { this[UseMediaServerKey] = value; }
}

私の理解では、プロパティが構成ファイルで定義されていない場合は、DefaultValueを返す必要があります。

ただし、上記の場合、構成プロパティが定義されていない場合でも、デフォルトのアクセサーが実行されることを意味するaArgumentNullExceptionがスローされます。bool.Parse(...)

もちろん、プロパティ アクセサーを次のように変更できます。

    private const string UseMediaServerKey = "useMediaServer";
    [ConfigurationProperty(UseMediaServerKey, IsRequired = false)]
    public bool UseMediaServer
    {
        get {
            bool result;
            if (bool.TryParse(this[UseMediaServerKey] as string, out result))
            {
                return result;
            }

            return false;
        }
        set { this[UseMediaServerKey] = value; }
    }

しかし、それでは、DefaultValueプロパティのポイントは何ですか?

4

1 に答える 1

9

this[UseMediaServerKey] as stringnull値の型boolが ではなくであるためstringです。カスタム構成セクションで文字列変換を行う必要はありません。すべてがフレームワークによって処理されます。

コードを次のように単純化します。

public bool UseMediaServer
{
    get { return (bool) this[UseMediaServerKey]; }
    set { this[UseMediaServerKey] = value; }
}

これで完了です。構成ファイルに何もない場合はthis[UserMediaServerKey]、正しく入力されたものを返します。DefaultValue文字列変換プロセスを変更する必要があった場合はTypeConverterAttribute、構成プロパティに a を追加してください。しかし、それはここでは必要ありません。

于 2013-01-23T13:14:49.940 に答える