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因为该值是 type bool,而不是string。您不必在自定义配置部分中进行任何字符串转换:一切都由框架为您处理。

将您的代码简化为:

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

你完成了。如果配置文件中没有,this[UserMediaServerKey]将返回正确键入的内容。DefaultValue如果您不得不更改字符串转换过程,TypeConverterAttribute请在配置属性上添加一个。但这不是必需的。

于 2013-01-23T13:14:49.940 回答