使用Convert将字符串转换为自定义类型

Pyg*_*gmy 2 c# types class

我正在从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类?

Mar*_*ell 7

我不会用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)

当然,写转换器代码!