我正在从XML文件中读取字符串值,我需要将其转换为某种(自定义)类型.
在我的情况下,我有一个InputPatch类,指定所需的类型[ValueType],所以我需要将字符串转换为inputPatch.ValueType
.
我想要做 :
inputPatch.DefaultValue = Convert.ChangeType(
defaultValueAttribute.Value, inputPatch.ValueType,
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
但对于我的BitmapFilename
类(它有一个字符串构造函数),结果是
从"System.String"到"ProjectX.Node.BitmapFilename"的无效转换.
那么,我怎样才能将Convert转换为我自己的BitmapFilename类?
我不会用Convert
这个; 相反,你可以使用:
TypeConverter converter = TypeDescriptor.GetConverter(inputPatch.ValueType);
object value = converter.ConvertFromInvariantString(defaultValueAttribute.Value);
Run Code Online (Sandbox Code Playgroud)
这确实需要您子类化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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,写转换器代码!