Acabo de encontrar algo con C# hoy en día que no había pensado antes. Tengo dos métodos en mi clase, uno es una sobrecarga del otro. Se declaran así:Palabra clave de C# params con dos parámetros del mismo tipo
1) public void RequirePermissions(params string[] permissions)...
2) public void RequirePermissions(string message, params string[] permissions)...
En mi código, he intentado llamar a la primera de ellas, así:
RequirePermissions("Permission1", "Permission2");
... esperando que llame a la primera sobrecarga. Bueno, llamó a la segunda sobrecarga. La única manera de que pueda conseguirlo para llamar al primer método, en este caso es pasar manualmente un objeto de cadena [], así:
RequirePermissions(new string[] { "Permission1", "Permission2" });
Ahora, este comportamiento no se me confunden porque entiendo que el compilador puede No diga a qué método realmente quería llamar en función de mis parámetros proporcionados. Pero si no tuviera cuidado, esto podría haber pasado desapercibido en mi código. Parece que Microsoft debería haber hecho que el compilador arrojara un error cuando se encontraba en una situación como la de arriba. ¿Alguien tiene alguna idea sobre esto? ¿Hay alguna otra manera de llamar a la primera sobrecarga que no sea la "solución" que publiqué?
Eche un vistazo aquí- http://ayende.com/Blog/archive/2007/12/31/Tricky-Code.aspx y aquí- http: //www.yoda.arachsys .com/csharp/teasers.html (no 6) – RichardOD
Estoy un poco confundido por su sugerencia. ¿Cree que la advertencia debería estar en la * llamada * ambigua, o en el conjunto de * declaraciones * que podría conducir a una llamada ambigua? –