gpt4 book ai didi

c# - 自定义 SettingsProvider 和检索默认值

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:14 26 4
gpt4 key购买 nike

我已经实现了我自己的继承自 SettingsProvider 类的类。如果我检索的值没有被用户设置,即这是程序第一次启动,我会尝试获取默认值。我看到的问题是,当从 SettingsProperty 中检索到默认值时,它会以字符串形式返回。我试图添加一些代码来转换项目,但在转换 System.Drawing.Colors 时遇到问题并收到错误“从‘System.String’到‘System.Drawing.Color’的无效转换。”。

这是我用来获取默认值的代码示例:

 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);
}

如何将默认值正确转换为正确的类型?

最佳答案

好的。所以我找到了答案。您需要针对 settings.PropertyType 实际上创建一个 TypeConverter 实例,而不是使用 Convert.ChangeType。此代码有效:

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);
}
}

关于c# - 自定义 SettingsProvider 和检索默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com