Les moyens de jeter des objets à un type générique

Par rapport à Casting générique de type "T" tout en mettant en place le type de T

Et avec l'exemple suivant

private static T deserialize<T>(string streng) where T : class
{
    XmlSerializer ser = new XmlSerializer(typeof(T));
    StringReader reader = new StringReader(streng);
    return ser.Deserialize(reader) as T;
}

et

private static T deserialize<T>(string streng)
{
    XmlSerializer ser = new XmlSerializer(typeof(T));
    StringReader reader = new StringReader(streng);
    return (T)ser.Deserialize(reader);
}

Je suis habituée à faire de la object as Type casting, donc j'étais un peu perplexe quand j'ai constaté que je ne pouvais pas juste faire avec T. Ensuite, j'ai trouvé la question ci-dessus et qu'une solution à la as T d'erreur du compilateur.

Mais pourquoi est where T : class nécessaire lors de l'utilisation de object as T et non pas lors de l'utilisation de (T)object?
Quelle est la réelle différence entre les deux façons de moulage de l'objet?

Oh oui, merci abatishchev. Beaucoup plus lisible sans les espaces de noms 🙂

OriginalL'auteur Heki | 2010-12-21