gpt4 book ai didi

c# - 设置中的自定义类型

转载 作者:太空狗 更新时间:2023-10-30 00:44:59 25 4
gpt4 key购买 nike

如何在“设置”中拥有自己的类型。

我成功地将它们添加到设置表中,但问题是我无法设置默认值。问题是我在 app.config 中看不到设置。

最佳答案

如果我对你的问题的解释是正确的,你有一个自定义类型,我们称之为 CustomSetting,并且你在你的 Settings.settings 文件中有一个设置类型,并使用 app.config 或 Visual Studio 的设置 UI 为该设置指定默认值。

如果这是你想要做的,你需要提供一个 TypeConverter对于可以从字符串转换的类型,如下所示:

[TypeConverter(typeof(CustomSettingConverter))]
public class CustomSetting
{
public string Foo { get; set; }
public string Bar { get; set; }

public override string ToString()
{
return string.Format("{0};{1}", Foo, Bar);
}
}

public class CustomSettingConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if( sourceType == typeof(string) )
return true;
else
return base.CanConvertFrom(context, sourceType);
}

public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
string stringValue = value as string;
if( stringValue != null )
{
// Obviously, using more robust parsing in production code is recommended.
string[] parts = stringValue.Split(';');
if( parts.Length == 2 )
return new CustomSetting() { Foo = parts[0], Bar = parts[1] };
else
throw new FormatException("Invalid format");
}
else
return base.ConvertFrom(context, culture, value);
}
}

一些背景信息

TypeConverter 是 .Net 框架中许多字符串转换魔法的幕后推手。它不仅对设置有用,而且对 Windows 窗体和组件设计人员如何将属性网格中的值转换为其目标类型以及 XAML 如何转换属性值也是如此。框架的许多类型都有自定义 TypeConverter 类,包括所有基本类型,还有 System.Drawing.SizeSystem.Windows.Thickness 等类型,还有很多很多其他类型.

在您自己的代码中使用 TypeConverter 非常简单,您需要做的就是:

TypeConverter converter = TypeDescriptor.GetConverter(typeof(TargetType));
if( converter != null && converter.CanConvertFrom(typeof(SourceType)) )
targetValue = (TargetType)converter.ConvertFrom(sourceValue);

支持的源类型各不相同,但string 是最常见的一种。与普遍存在但不太灵活的 Convert 类(仅支持原始类型)相比,这是一种从字符串转换值的更强大(不幸的是鲜为人知)的方法。

关于c# - 设置中的自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469474/

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