Maison >développement back-end >C++ >Comment puis-je invoquer des méthodes génériques en C # avec des paramètres de type dynamique à l'exécution?
C # Exécutez le paramètre de type dynamique de la méthode générique Scrang
Lorsque vous utilisez des méthodes génériques en C #, les paramètres de type sont parfois inconnus lors de la compilation et doivent être obtenus au moment de l'exécution. Cet article traite de la meilleure pratique d'appeler la méthode générique dans ce cas.
Considérons les exemples de code suivants, où
Méthodes Essayez d'utiliser les paramètres de type obtenus à partir des variables d'exécution pour appeler la méthode générique Example
. myType
GenericMethod<T>
<code class="language-csharp">public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); GenericMethod<myType>(); // 这行代码无法编译通过 StaticMethod<myType>(); // 这行代码也无法编译通过 } public void GenericMethod<T>() { // ... } public static void StaticMethod<T>() { // ... } }</code>, car le compilateur ne peut pas déduire le paramètre de type pendant la compilation. Pour résoudre ce problème, nous devons utiliser la réflexion pour obtenir des méthodes, puis utiliser les paramètres de type requis pour le "construire".
GenericMethod<myType>
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod)); MethodInfo generic = method.MakeGenericMethod(myType); generic.Invoke(this, null);</code>Utilisez le paramètre de type spécifié pour construire la spécification de la méthode générique. Enfin, est utilisé pour appeler la méthode générique du constructeur.
GetMethod
pour les méthodes statiques, MakeGenericMethod
a passé Invoke
comme premier paramètre à
null
En C # 4 et des versions supérieures, si l'inférence du type est possible, les appels dynamiques peuvent être utilisés pour simplifier davantage ce processus, mais ce n'est pas toujours le cas. La solution fournie par réflexion est toujours une méthode fiable pour appeler la méthode générique à l'aide de paramètres de type dynamique. Invoke
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!