Maison > développement back-end > C++ > Comment puis-je utiliser le type d'une variable comme paramètre générique en C# ?

Comment puis-je utiliser le type d'une variable comme paramètre générique en C# ?

Linda Hamilton
Libérer: 2025-01-17 20:47:10
original
804 Les gens l'ont consulté

How Can I Use a Variable's Type as a Generic Parameter in C#?

Utiliser des types de variables comme paramètres génériques en C#

Les génériques en C# assurent la sécurité des types au moment de la compilation, exigeant que le type soit connu au moment de la compilation.

Supposons que vous définissiez une méthode générique :

<code class="language-csharp">bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;</code>
Copier après la connexion

Lorsque vous essayez de l'utiliser dynamiquement, vous rencontrerez une erreur de compilation :

<code class="language-csharp">Type t = entity.GetType();
DoesEntityExist<t>(entityGuid, transaction);</code>
Copier après la connexion

En effet, t n'est connu qu'au moment de l'exécution, ce qui viole le principe de sécurité des types au moment de la compilation des génériques.

Vous pouvez utiliser la réflexion pour gérer des méthodes génériques typées dynamiquement :

<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist")
                             .MakeGenericMethod(new Type[] { t });
method.Invoke(this, new object[] { entityGuid, transaction });</code>
Copier après la connexion

Cependant, cette approche n'est pas idéale en raison de sa complexité et de sa surcharge de performances.

Une meilleure solution consiste à rendre votre méthode d'appel générique et à transmettre le paramètre de type en tant que paramètre de type :

<code class="language-csharp">void MyMethod<T>(T entity, Guid guid, ITransaction transaction)
{
    DoesEntityExist<T>(guid, transaction);
}</code>
Copier après la connexion

De cette façon, vous pouvez spécifier dynamiquement le type lors de l'appel de MyMethod, évitant ainsi l'utilisation de la réflexion tout en conservant la sécurité du type.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal