Я пытаюсь написать универсальный метод для приведения типов. Я хочу написать что-то вроде Cast.To
вместо (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
.
Этот код не работает, потому что виртуальная машина не знает как преобразовать переменную типа объект
в тип B
во время выполнения? Но в сообщении об исключении говорится: «невозможно преобразовать объект типа A в тип B». Итак, CLR знает о реальном типе переменной o
, почему он не может выполнить приведение?
И вот главный вопрос: как мне переписать метод T To
, чтобы исправить эту проблему?