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))
2 votes
@vsapiha, Cela ne fonctionne que si l'objet implémente IConvertible. C'est très bien s'il le fait.