Je viens de rencontrer quelque chose avec C# aujourd'hui auquel je n'avais pas pensé auparavant. J'ai deux méthodes dans ma classe, une surcharge de l'autre. Ils sont déclarés comme ceci:C# params mot-clé avec deux paramètres du même type
1) public void RequirePermissions(params string[] permissions)...
2) public void RequirePermissions(string message, params string[] permissions)...
Dans mon code, j'ai essayé d'appeler le premier comme ceci:
RequirePermissions("Permission1", "Permission2");
... attendre pour appeler la première surcharge. Eh bien, il a appelé la deuxième surcharge. La seule façon que je peux obtenir pour appeler la première méthode dans ce cas est de passer manuellement une chaîne objet [] comme ceci:
RequirePermissions(new string[] { "Permission1", "Permission2" });
Maintenant, ce comportement ne me confondez pas parce que je comprends que le compilateur peut Ne pas dire quelle méthode je voulais réellement appeler en fonction de mes paramètres fournis. Mais n'étais-je pas prudent, cela aurait pu passer inaperçu dans mon code. Il semble que Microsoft aurait dû lancer une erreur au compilateur lorsqu'il a rencontré une situation comme ci-dessus. Quelqu'un at-il des idées à ce sujet? Existe-t-il un autre moyen d'appeler la première surcharge autre que la "solution" que j'ai affichée?
Jetez un oeil ici- http://ayende.com/Blog/archive/2007/12/31/Tricky-Code.aspx et ici- http: //www.yoda.arachsys .com/csharp/teasers.html (no 6) – RichardOD
Je suis un peu confus par votre suggestion. Pensez-vous que l'avertissement devrait être sur l'appel ambigu *, ou sur l'ensemble des * déclarations * qui pourraient mener à un appel ambigu? –