Ambiguïté de la résolution de surcharge du groupe de méthodes C#
Le problème :
L'utilisation de la syntaxe de groupe de méthodes avec des méthodes déléguées surchargées en C# peut déclencher une erreur du compilateur « Invocation ambiguë », même si les méthodes anonymes appellent avec succès les mêmes surcharges.
Pourquoi cela arrive :
Le compilateur C# ne dispose pas d'une "meilleure" règle définitive lors de la conversion d'un groupe de méthodes en plusieurs types de délégués compatibles lors de la résolution de surcharge. Par exemple, si classWithSimpleMethods.GetString
pouvait être converti à la fois en Func<string>
et Action
, le compilateur ne peut pas choisir entre eux, ce qui entraîne une ambiguïté.
Résolution (diffusion de type explicite) :
La solution consiste à convertir explicitement le groupe de méthodes en type de délégué souhaité :
<code class="language-csharp">classWithDelegateMethods.Method((Func<string>)classWithSimpleMethods.GetString);</code>
Amélioration C# 7.3 :
Résolution de surcharge améliorée en C# 7.3 pour les groupes de méthodes. Dans de nombreux cas (comme dans l'exemple fourni), classWithDelegateMethods.Method(classWithSimpleMethods.GetString)
et les appels similaires se compilent désormais sans casting explicite. Cependant, une ambiguïté peut encore surgir dans des scénarios complexes.
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!