我正在读取XML文件中的字符串值,我需要将其转换为某种(自定义)类型。
在我的情况下,我有一个InputPatch类,它指定了想要的类型[ValueType],所以我需要将字符串转换为inputPatch.ValueType
。
我想这样做:
inputPatch.DefaultValue = Convert.ChangeType(
defaultValueAttribute.Value, inputPatch.ValueType,
CultureInfo.InvariantCulture);
但是对于我的BitmapFilename
类(它有一个字符串构造函数),结果是
从'System.String'到'ProjectX.Node.BitmapFilename'的转换无效。
那么,我怎样才能将Convert转换为我自己的BitmapFilename类?
答案 0 :(得分:7)
我不会将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);
}
}
}
当然,写下转换器代码!
答案 1 :(得分:0)
因为您要实际支持任何自定义类型,所以您必须提出自己的解决方案:实现自定义转换逻辑。这可以使用Reflection轻松完成。
此致 Artak
答案 2 :(得分:-1)
让您的班级实施IConvertible
已编辑:要转换其他类型,请尝试Extension Methods