65 votes

Méthode d’extension ambiguë

J’effectue l’appel suivant à une méthode d’extension :

J’obtiens une erreur indiquant que la méthode d’extension est ambiguë .

J’ai deux dll avec le même code qui s’implémentent `` sous des espaces de noms différents.

Comment puis-je faire explicitement référence à un espace de noms ?

Comment le ferais-je s’il s’agissait du même espace de noms ?

Mise à jour: Je ne peux pas réécrire les dll 3rd party.

90voto

Anthony Pegram Points 58528
<ol> <li>Supprimez l’ambiguïté en redéfinissant ou en éliminant l’une des méthodes à la source. Vous n’avez pas besoin de redondance.</li> <li>Si vous ne contrôlez pas la source, n’incluez qu’une seule d’entre elles dans votre fichier de classe via la <code></code> directive.</li> <li>Si vous avez toujours besoin des deux espaces de noms dans le fichier de classe donné, appelez la version que vous souhaitez simplement en tant qu’appel de classe statique, en identifiant sans ambiguïté la méthode via un nom de classe complet.</li> <p>-</p><pre><code></code></pre></ol>

41voto

pakeha_by Points 126

Juste au cas où quelqu’un en aurait besoin...

L’ambiguïté peut être résolue si des espaces de noms simultanés qui ont des méthodes d’extension portant le même nom sont inclus à différents niveaux (la plupart des espaces de noms internes inclus auront la priorité).

Par exemple:

10voto

Jon Skeet Points 692016

Je vous suggère fortement de renommer l’une des méthodes d’extension. Selon ce que vous faites d’autre, vous pouvez éventuellement simplement supprimer la `` directive pour l’un de ces espaces de noms, mais cela n’aidera pas si vous avez besoin des deux espaces de noms pour d’autres choses. (Cela conduit à une suggestion de mettre les méthodes d’extension dans leur propre espace de noms, bien sûr.) Renommer est susceptible de simplifier les choses en général cependant.

0voto

Joel Etherton Points 24155

Vous devez modifier la signature de l’un d’entre eux (ou des deux) pour différencier ce qu’il fait. Cela ressemble à une duplication de code quelque part, à moins que ceux-ci ne fassent des choses différentes. Bien que s’ils faisaient des choses différentes, je pense que vous différenciez cela dans les noms. Je recommanderais de créer une sorte d’énumération (un drapeau peut-être) à passer comme argument supplémentaire à l’une des méthodes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X