С помощью params
вы можете вызвать свой метод следующим образом:
addTwoEach(1, 2, 3, 4, 5);
Без params
вы не можете.
Кроме того, вы можете вызвать метод с помощью массив в качестве параметра в обоих случаях :
addTwoEach(new int[] { 1, 2, 3, 4, 5 });
То есть params
позволяет использовать ярлык при вызове метода.
Не связанный, вы можете резко сократить свой метод:
public static int addTwoEach(params int[] args)
{
return args.Sum() + 2 * args.Length;
}
params
также позволяет вызывать метод с одним аргументом.
private static int Foo(params int[] args) {
int retVal = 0;
Array.ForEach(args, (i) => retVal += i);
return retVal;
}
i.e. Foo(1);
вместо Foo(new int[] { 1 });
. Может быть полезно для сокращений в сценариях, где вам может потребоваться передать только одно значение, а не весь массив. Он по-прежнему обрабатывается таким же образом в методе, но дает некоторые конфеты для вызова таким образом.
Он позволяет вам добавить столько параметров базового типа в ваш вызов, сколько захотите.
addTwoEach(10, 2, 4, 6)
, тогда как со второй формой вы должны использовать массив в качестве параметра
addTwoEach(new int[] {10,2,4,6})
Не нужно создавать методы перегрузки, просто используйте один единственный метод с параметрами, как показано ниже
// Call params method with one to four integer constant parameters.
//
int sum0 = addTwoEach();
int sum1 = addTwoEach(1);
int sum2 = addTwoEach(1, 2);
int sum3 = addTwoEach(3, 3, 3);
int sum4 = addTwoEach(2, 2, 2, 2);
Одна опасность с params
Ключевым словом является, если после Звонки на метод были закодированы,
params
до изменения подписи были совместимы с типом params
Параметр Эти вызовы будут продолжать компилироваться с одним или несколькими выражениями, ранее предназначенными для required . Параметры обрабатываются как необязательный параметр params
. Я просто столкнулся с худшим возможным случаем этого: параметр params
был для Type object[]
.
Это примечательно, потому что разработчики привыкли к тому, что компилятор шлепает их запястья с гораздо более распространенным сценарий, в котором параметры удаляются из метода со всеми параметрами required (потому что ожидается ожидаемое число ожидаемых параметров).
Для меня это не стоит ярлыка. (Type)[]
без params
будет работать с 0 до бесконечности № параметров без необходимости переопределения. В худшем случае вам придется добавить , new (Type) [] {}
к вызовам, где он не применяется.
Btw, imho, самая безопасная (и наиболее читаемая практика):
params
или нет), он позволяет вам искать вызовы, в которых проходит конкретный необязательный параметр (и, следовательно, скорее всего, это не или в лизинге t имеет возможность быть не значением по умолчанию), (ПРИМЕЧАНИЕ: Причины 1.2. и 1.3. может облегчить и уменьшить вероятность ошибки даже при кодировании начальных вызовов, не говоря уже о том, что вызовы должны быть прочитаны и / или изменены.)) и
ПРИМЕЧАНИЕ:
VS должен иметь опцию, которая генерирует фрагменты метода вызова с Именованными параметрами (по одной на строку, конечно, P) и параметр компилятора, который требует Именованные параметры (аналогично по понятию Option Explicit в VB, который, кстати, требование было умножено один раз так же, как и возмутительно, но сейчас довольно требуется по «лучшей практике»). Фактически, «в мой день»;), в 1991 году, всего за несколько месяцев до моей карьеры, еще до того, как я использовал (или даже видел) язык с Именованными параметрами, у меня был анти-sheeple / «просто потому, что вы можете, не означает, что вы должны / не слепо« разрезать концы жаркого », достаточно, чтобы имитировать его (используя встроенные комментарии), не увидев, что кто-то это делает. Не использовать Именованные параметры (а также другой синтаксис, который сохраняет «драгоценные» нажатия клавиш исходного кода) является реликтом эры перфокарта, когда большинство этих синтаксисов началось. Нет никакого оправдания для этого с современным оборудованием и IDE и гораздо более сложным программным обеспечением, где читаемость много, многое, MUCH более важно. «Код читается гораздо чаще, чем написано». Пока вы не дублируете неавтоматизированный код, каждое нажатие клавиши может стоить экспоненциально больше, когда кто-то (даже вы) пытается прочитать его позже.
Добавление ключевого слова params показывает, что вы можете передать несколько параметров при вызове этого метода, который невозможен без его использования. Чтобы быть более конкретным:
static public int addTwoEach(params int[] args)
{
int sum = 0;
foreach (var item in args)
{
sum += item + 2;
}
return sum;
}
Когда вы вызовете метод выше, вы можете вызвать его одним из следующих способов:
addTwoEach()
addTwoEach(1)
addTwoEach(new int[]{ 1, 2, 3, 4 })
Но когда вы удалите ключевое слово params, только третий способ вышеуказанных способов будет работать нормально. Для первого и второго случаев вы получите сообщение об ошибке.