Maison >développement back-end >C++ >Comment convertir en toute sécurité un type générique « T » en chaîne en C# ?

Comment convertir en toute sécurité un type générique « T » en chaîne en C# ?

DDD
DDDoriginal
2024-12-29 02:59:14364parcourir

How to Safely Cast a Generic Type 'T' to a String in C#?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn