Я пытаюсь написать общий метод для создания типов. Я хочу написать что-то вроде Cast.To<Type>(variable)
вместо (Type) variable
.
Моя неправильная версия этого метода:
public class Cast
{
public static T To<T>(object o)
{
return (T) o;
}
}
И это простой тест:
public class A
{
public static explicit operator B(A a)
{
return new B();
}
}
public class B
{
}
A a = new A();
B b = Cast.To<B>(a);
Как вы уже догадались, этот код не сработает с InvalidCastException
.
Неужели этот код терпит неудачу, потому что виртуальная машина не знает, как передать переменную типа object
для ввода B
во время выполнения? Но сообщение об исключении говорит: "невозможно передать объект типа A в тип B". Итак, CLR знает о реальном типе переменной o
, почему он не может выполнить кастинг?
И вот главный вопрос: как мне переписать метод T To<T>(object o)
, чтобы исправить эту проблему?