Универсальный метод приведения типов

Я пытаюсь написать универсальный метод для приведения типов. Я хочу написать что-то вроде Cast.To (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 .

Этот код не работает, потому что виртуальная машина не знает как преобразовать переменную типа объект в тип B во время выполнения? Но в сообщении об исключении говорится: «невозможно преобразовать объект типа A в тип B». Итак, CLR знает о реальном типе переменной o , почему он не может выполнить приведение?

И вот главный вопрос: как мне переписать метод T To (object o) , чтобы исправить эту проблему?

21
задан xzt 23 July 2011 в 16:19
поделиться