C#TypeConverter.ConvertFrom()问题

mbp*_*mbp 1 .net c# type-conversion typeconverter

我有一个问题,以下代码从字符串返回一个对象:

[TypeConverter(typeof(MyConverter))]
public class MyClass
{
    public string s;
}

public class MyConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return (sourceType == typeof(string)) ? true : base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is string)
        {
            MyClass m = new MyClass();
            m.s = (string)value;
            return m;
        }

        return base.ConvertFrom(context, culture, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此代码时:

string s_test = "test";

MyClass m_test;

m_test = (MyClass)Convert.ChangeType(s_test, typeof(MyClass));
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

从'System.String'到'MyClass'的转换无效.

我的代码有什么问题?请注意,我必须使用ConvertFrom()方法...

预先感谢您的帮助.

堆栈跟踪:

[InvalidCastException: Invalid cast from 'System.String' to 'MyClass'.]
   System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) +9496632
   System.String.System.IConvertible.ToType(Type type, IFormatProvider provider) +8
   System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +9531720
   System.Convert.ChangeType(Object value, Type conversionType) +32
   OrderController.Index() in [...].cs:70
   ... omitted for brevity ...

Jon*_*eet 8

你期望Convert.ChangeType使用一个TypeConverter如果存在 - 它没有.TypeConverter通常与TypeDescriptor(通常隐含在UI框架中)一起使用.