使用转换将字符串转换为自定义类型
问题描述:
我正在从XML文件中读取字符串值,我需要将其转换为某种(自定义)类型。使用转换将字符串转换为自定义类型
在我的情况下,我有一个InputPatch类,它指定了想要的类型[ValueType],所以我需要将字符串转换为inputPatch.ValueType
。
我想做的事:
inputPatch.DefaultValue = Convert.ChangeType(
defaultValueAttribute.Value, inputPatch.ValueType,
CultureInfo.InvariantCulture);
但我BitmapFilename
类(它有一个字符串构造函数)的结果是
从 'System.String' 到“projectX创建无效的演员。 Node.BitmapFilename”。
那么,我该如何获得转换将字符串转换为我自己的BitmapFilename类?
答
我不会用Convert
此;相反,你可以使用:
TypeConverter converter = TypeDescriptor.GetConverter(inputPatch.ValueType);
object value = converter.ConvertFromInvariantString(defaultValueAttribute.Value);
这并不需要你继承TypeConverter
,并标记你的类型转换器。但是,它将适用于所有标准类型,并且是可扩展的。
[TypeConverter(typeof(BitmapFilenameConverter))]
public class BitmapFilename {...}
class BitmapFilenameConverter : TypeConverter {
public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
string s = value as string;
if(s != null) {
/***** YOUR CODE HERE ******/
} else {
return base.ConvertFrom(context, culture, value);
}
}
}
当然,写转换器代码!
看来,IConvertible是用来将值转换为某物。 我不想要将我的BitmapFilename类转换为某种东西,我想将字符串转换为使用System.Convert的BitmapFilename。 或者我在IConvertible中丢失了一些可以帮助我的东西吗? – Pygmy
尝试扩展方法 - 正如我在上面的编辑中所述。但是,从架构方面来看这是否是一个好主意,完全是另一个问题。 – Melllvar
我的歉意,我不知道我明白我应该如何使用扩展方法让System.Convert将字符串转换为我的自定义类型? 您能否详细说明一下? – Pygmy