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>
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>
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>
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>
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!