Я пытаюсь написать общий метод для создания типов. Я хочу написать что-то вроде 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), чтобы исправить эту проблему?