182 votes

La valeur de type 'T' ne peut pas être convertie en une valeur de type 'T'.

Il s'agit probablement d'une question de novice, mais, étonnamment, Google n'a pas fourni de réponse.

J'ai cette méthode plutôt artificielle

T HowToCast<T>(T t)
{
    if (typeof(T) == typeof(string))
    {
        T newT1 = "some text";
        T newT2 = (string)t;
    }

    return t;
}

Étant donné que je viens d'un milieu C++, je m'attendais à ce que cela fonctionne. Cependant, la compilation échoue avec "Cannot implicitly convert type 'T' to string" et "Cannot convert type 'T' to string" pour les deux affectations ci-dessus.

Soit je fais quelque chose de mal sur le plan conceptuel, soit je n'ai pas la bonne syntaxe. Aidez-moi à résoudre ce problème.

Merci !

23 votes

IMO, si vous vérifiez les types dans votre code générique, alors les génériques ne sont probablement pas la bonne solution à votre problème.

0 votes

L'expression typeof(T) == typeof(string) est résolu au moment de l'exécution, et non de la compilation. Ainsi, la ligne suivante du bloc n'est pas valide.

9 votes

(T)Convert.ChangeType(newT1, typeof(T))

-5voto

Serch Points 21

Changez cette ligne :

if (typeof(T) == typeof(string))

Pour cette ligne :

if (t.GetType() == typeof(string))

1 votes

Ils sont les mêmes

0 votes

Les deux sont identiques... il s'agit simplement d'utiliser le mot-clé du langage plutôt que les API de la bibliothèque de classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X