Méthode générique pour la conversion de type

Je suis en train d'écrire générique de la méthode de jeter types. Je veux écrire quelque chose comme Cast.To<Type>(variable) au lieu de (Type) variable.
Ma mauvaise version de cette méthode:

public class Cast
{
    public static T To<T>(object o)
    {
        return (T) o;
    }
}

Et c'est simple test:

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);

Comme vous l'avez deviné, ce code va échouer avec InvalidCastException.

Est ce code d'échec à cause de la machine virtuelle ne sais pas comment faire pour lancer une variable de type object de type B au moment de l'exécution? Mais le message de l'exception, dit: "impossible de convertir l'objet de type A, de type B". Donc CLR connaît vrai type de la variable o, pourquoi il ne peut pas effectuer de casting?

Et voici la question principale: comment dois-je réécrire la méthode T To<T>(object o) pour résoudre ce problème?

  • Je n'aime pas vraiment l'idée d'un "convertir quoi que ce soit dans un T". Je suppose que je ne connais pas assez bien le C#.
  • Et voici ma question principale: Pourquoi? En quoi est Cast.To<B>(...) plus facile à utiliser que (B)...?
  • JeffN825 explique - méthode fait couramment à l'interface de style d'appel possible. Je ne vois pas d'autres raisons que moi-même...
  • ne vous méprenez pas sur la question, je ne cherche pas à remplacer le traditionnel type de jette, je veux comprendre comment CLR fonctionne et comment résoudre le problème décrit.
  • Ah, si c'est juste une question de mieux comprendre le CLR, je peux les comprendre.
InformationsquelleAutor xzt | 2011-07-22