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

时间:2011-11-04 00:04:12

标签: c# class types

我正在读取XML文件中的字符串值,我需要将其转换为某种(自定义)类型。

在我的情况下,我有一个InputPatch类,它指定了想要的类型[ValueType],所以我需要将字符串转换为inputPatch.ValueType

我想这样做:

inputPatch.DefaultValue = Convert.ChangeType(
    defaultValueAttribute.Value, inputPatch.ValueType,
    CultureInfo.InvariantCulture);

但是对于我的BitmapFilename类(它有一个字符串构造函数),结果是

  

从'System.String'到'ProjectX.Node.BitmapFilename'的转换无效。

那么,我怎样才能将Convert转换为我自己的BitmapFilename类?

3 个答案:

答案 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