Я реализовал 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);
}
}