2011-02-16 89 views
2

我已經實現了我自己的類,從SettingsProvider類繼承。如果我檢索的值沒有被用戶設置,即它是程序第一次啓動,我試圖獲取默認值。我看到的問題是,當從SettingsProperty中檢索默認值時,它將以字符串形式返回。我試圖添加一些代碼轉換項目,但我轉換System.Drawing.Colors時遇到問題,並收到錯誤「從'System.String'無效轉換爲'System.Drawing.Color'」。自定義SettingsProvider和檢索默認值

這裏是我用來獲取默認值的代碼示例:

private object GetDefaultValue(SettingsProperty setting) 
    { 
     if (setting.PropertyType.IsEnum) 
      return Enum.Parse(setting.PropertyType, setting.DefaultValue.ToString()); 

     // Return the default value if it is set 
     if (setting.DefaultValue != null) 
      return Convert.ChangeType(setting.DefaultValue, setting.PropertyType); 
     else // If there is no default value return the default object 
      return Activator.CreateInstance(setting.PropertyType); 
    } 

我怎樣才能正確的默認值轉換爲正確的類型?

回答

1

好的。所以我找到了答案。而不是使用Convert.ChangeType,你需要根據settings.PropertyType實際創建一個TypeConverter實例。此代碼作品:

private object GetDefaultValue(SettingsProperty setting) 
    { 
     if (setting.PropertyType.IsEnum) 
      return Enum.Parse(setting.PropertyType, setting.DefaultValue.ToString()); 

     // Return the default value if it is set 
     // Return the default value if it is set 
     if (setting.DefaultValue != null) 
     { 
      System.ComponentModel.TypeConverter tc = System.ComponentModel.TypeDescriptor.GetConverter(setting.PropertyType); 
      return tc.ConvertFromString(setting.DefaultValue.ToString()); 
     } 
     else // If there is no default value return the default object 
     { 
      return Activator.CreateInstance(setting.PropertyType); 
     } 
    }