Я только что встретил что-то с C# сегодня, о котором я раньше не думал. У меня есть два метода в моем классе, один - перегрузка другого. Они объявлены следующим образом:C# params ключевое слово с двумя параметрами того же типа
1) public void RequirePermissions(params string[] permissions)...
2) public void RequirePermissions(string message, params string[] permissions)...
В моем коде, я попытался назвать первый, как так:
RequirePermissions("Permission1", "Permission2");
... Главное, чтобы вызвать первую перегрузку. Ну, это называется второй перегрузкой. Единственный способ, которым я могу получить его, чтобы вызвать первый метод в этом случае вручную передать строку [] объект следующим образом:
RequirePermissions(new string[] { "Permission1", "Permission2" });
Теперь это поведение не смущает меня, потому что я понимаю, что компилятор может 't скажите, какой метод я действительно хотел вызвать на основе моих предоставленных параметров. Но не был ли я осторожен, это могло остаться незамеченным в моем коде. Кажется, Microsoft должна была заставить компилятор выбросить ошибку, когда она столкнулась с ситуацией, подобной выше. У кого-нибудь есть мысли по этому поводу? Есть ли другой способ вызвать первую перегрузку, отличную от «решения», которую я опубликовал?
Посмотрите здесь http://ayende.com/Blog/archive/2007/12/31/Tricky-Code.aspx и здесь http: //www.yoda.arachsys ,com/csharp/teasers.html (no 6) – RichardOD
Я немного смущен вашим предложением. Считаете ли вы, что предупреждение должно быть вызвано двусмысленным * вызовом * или набором * деклараций *, которые могут привести к двусмысленному звонку? –