Реализация TypeConverter не может распознать тип объекта - PullRequest
0 голосов
/ 23 сентября 2019

Я реализовал TypeConverter для пользовательского класса Foo и хочу переопределить преобразование в строку.

Проблема в том, что в моем переопределенном методе ConvertTo тестовое выражение ( значение равно Foo foo) всегда завершается ошибкой, несмотря на то, что значение имеет тип Foo.

Проверка переменных с помощью Locals говорит, что значение имеет тип object {MyNamespace.Foo} Это должно быть хорошо?

Что я делаю не так?

 [TypeConverter(typeof(FooConverter))]
    public class Foo
    {
    }

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

    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
        if (destinationType == typeof(Foo)) return true;
        return base.CanConvertTo(context, destinationType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
        if (value is string valStr) {
            //custom conversion, does not matter
        }
        return base.ConvertFrom(context, culture, value);
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
        if (destinationType == typeof(string)) {
            if (value is Foo fooCast) //this test always fails, why?
            {
                //custom parse, does not matter
                return parseResult;
            }
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }
}
...