2012-02-28 2 views
4

Это исходит из этого другого вопроса: (How to build a method with unspecified amount of params en C#). Но так как это другой вопрос, который я должен был спросить его здесьМетоды: params string [] с одним параметром и одной строкой

Предположив вы метод перегружен (это перегрузка допускается компилятором):

private static string AddURISlash(params string[] remotePaths) //multiple strings 
private static string AddURISlash(string remotePaths) //single string 

Как вы должны знать, который будет выполняться, когда только один параметр получен?

Есть ли соглашение? или что-то, что вы должны проверить один раз? Должен ли я предполагать, что, поскольку единственный способ для одной строки метод, который должен быть выполнен, - , чтобы получить одну строку, это тот, который недвусмысленно выполняется?

Благодаря

+0

Почему у вас есть второй вариант? Если семантика не отличается, но тогда в этом случае было бы лучше назвать их по-разному. – leppie

ответ

8

Как вы должны знать, какой будет выполняться, когда только один параметр будет получен?

Вы читаете спецификацию, в которой объясняется, как обрабатывается разрешение перегрузки. Из секции 7.5.3.2, соответствующая точка пули:

В противном случае, если М Р применит в его нормальной форме и M Q имеет массив Params и применимо только в его развернутом виде, то M P лучше, чем M Q.

Таким образом, версия которой не требует параметров расширения массива (ваша единственная строка версия) выбирается вместо компиляции версии массива параметров.

Смежные вопросы