Méthode générique C# : utilisation flexible des paramètres de type variable
Lorsque vous utilisez des méthodes génériques en C#, telles que DoesEntityExist<T>
(où T représente un type conforme à l'interface IGloballyIdentifiable), vous pouvez rencontrer des problèmes de compilation si vous essayez d'utiliser des types de variables pour spécifier dynamiquement des paramètres de type génériques (tels que comme Type t = entity.GetType();
) erreur. En effet, les génériques C# nécessitent que les informations de type soient connues au moment de la compilation.
Utiliser le mécanisme de réflexion
Pour surmonter cette limitation, un mécanisme de réflexion peut être utilisé. Cette technique consiste à appeler les méthodes GetMethod et MakeGenericMethod sur l'objet MethodInfo associé à la méthode générique. Cela vous permet de fournir un paramètre de type de manière dynamique, même s'il n'est connu qu'au moment de l'exécution.
<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t }); method.Invoke(this, new object[] { entityGuid, transaction });</code>
Améliorer la généricité des méthodes
Une autre approche consiste à modifier la méthode appelante elle-même pour en faire une méthode générique, vous permettant de transmettre les paramètres de type requis en tant que paramètres. Cela amène la décision de sélection de type à un niveau supérieur, simplifiant les appels de méthode ultérieurs.
Explication supplémentaire
Afin de fournir des conseils plus spécifiques, il est préférable de fournir des informations plus contextuelles sur le problème. Parfois, recourir à la réflexion peut être nécessaire, mais planifier stratégiquement votre utilisation d'un type générique peut minimiser sa réutilisation. En choisissant soigneusement le moment de la réflexion, vous pouvez garantir que les paramètres de type ne sont spécifiés dynamiquement qu'une seule fois, permettant au code en aval de les utiliser de manière transparente.
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!