Ho appena incontrato qualcosa con C# oggi a cui non avevo pensato prima. Ho due metodi nella mia classe, uno un sovraccarico dell'altro. Essi sono dichiarati in questo modo:Parola chiave C# params con due parametri dello stesso tipo
1) public void RequirePermissions(params string[] permissions)...
2) public void RequirePermissions(string message, params string[] permissions)...
Nel mio codice, ho provato a chiamare il primo in questo modo:
RequirePermissions("Permission1", "Permission2");
... aspettavo di chiamare il primo sovraccarico. Bene, ha chiamato il secondo sovraccarico. L'unico modo che posso ottenere per chiamare il primo metodo, in questo caso è quello di passare manualmente un oggetto string [] in questo modo:
RequirePermissions(new string[] { "Permission1", "Permission2" });
Ora, questo comportamento non mi confondere perché capisco che il compilatore può Non so quale metodo in realtà volevo chiamare in base ai miei parametri forniti. Ma non stavo attento che questo potrebbe essere passato inosservato nel mio codice. Sembra che Microsoft avrebbe dovuto fare in modo che il compilatore generasse un errore quando si è verificata una situazione come sopra. Qualcuno ha qualche idea su questo? C'è un altro modo per chiamare il primo sovraccarico oltre alla "soluzione" che ho postato?
Dai un'occhiata qui- http://ayende.com/Blog/archive/2007/12/31/Tricky-Code.aspx e qui- http: //www.yoda.arachsys .com/csharp/teasers.html (no 6) – RichardOD
Sono un po 'confuso dal tuo suggerimento. Pensi che l'avviso dovrebbe essere sull'ambigua * chiamata * o sull'insieme di * dichiarazioni * che potrebbero portare a una chiamata ambigua? –