2011-02-16 85 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); 
     } 
    }