2013-01-23 152 views
3

我已經創建了以下屬性自定義配置節:自定義的ConfigurationSection默認布爾值

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應該返回。

但是,在上述情況下ArgumentNullException被拋出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屬性點?

回答

8

this[UseMediaServerKey] as stringnull,因爲該值的類型爲bool,而不是string。您不必在自定義配置部分進行任何字符串轉換:框架爲您處理所有內容。

簡化您的代碼:

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

大功告成。如果配置文件中沒有任何內容,則this[UserMediaServerKey]將返回DefaultValue正確類型。如果您必須更改字符串轉換過程,請在配置屬性上添加TypeConverterAttribute。但這不是必要的。