Conversion des types génériques en C#
La question suivante se pose fréquemment parmi les développeurs : "Erreur : la valeur de type 'T' ne peut pas être convertie en 'chaîne'." Ce problème survient lorsque vous tentez de convertir un type générique « T » en un type concret spécifique.
Considérez la méthode suivante :
T HowToCast<T>(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; }
Bien qu'il provienne d'un arrière-plan C, ce code ne parvient pas à compiler. Le compilateur renvoie des erreurs telles que « Impossible de convertir implicitement le type « T » en chaîne » et « Impossible de convertir le type « T » en chaîne. »
Comprendre le problème
Le problème clé ici est que le compilateur ne peut pas déterminer le type spécifique de « T ». Même s'il se trouve dans un bloc if qui vérifie si 'T' est une chaîne, le compilateur ne dispose pas de cette information au moment de la compilation.
Solution
Pour résoudre Pour résoudre ce problème, nous devons effectuer une conversion intermédiaire en « objet ». Puisque n'importe quel type générique peut être converti en « objet », nous pouvons ensuite convertir « objet » en le type concret souhaité, dans ce cas, une chaîne.
Voici le code corrigé :
T newT1 = (T)(object)"some text"; string newT2 = (string)(object)t;
En effectuant un casting intermédiaire en « objet », nous spécifions explicitement les conversions et garantissons que le compilateur peut effectuer les opérations correctement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!