Передача пустого массива в качестве значения по умолчанию для необязательного параметра
Как определить функцию, которая по умолчанию принимает необязательный массив с пустым массивом?
public void DoSomething(int index, ushort[] array = new ushort[] {},
bool thirdParam = true)
приводит к:
Значение параметра по умолчанию для 'array' должно быть константой времени компиляции.
Ответы
Ответ 1
Вы не можете создавать константы времени компиляции ссылок на объекты.
Единственной допустимой константой времени компиляции, которую вы можете использовать, является null
, поэтому измените код на это:
public void DoSomething(int index, ushort[] array = null,
bool thirdParam = true)
И внутри вашего метода сделайте следующее:
array = array ?? new ushort[0];
Ответ 2
Если вы можете сделать массив последним аргументом, вы также можете сделать это:
public void DoSomething(int index, bool wasThirdParam = true, params ushort[] array)
Компилятор автоматически передаст пустой массив, если он не указан, и вы получите дополнительную гибкость либо передать массив как один аргумент, либо поместить элементы непосредственно в качестве аргументов переменной длины в свой метод.
Ответ 3
Я знаю, что это старый вопрос, и хотя этот ответ прямо не решает, как обойти ограничения, наложенные компилятором, перегрузка метода является альтернативой:
public void DoSomething(int index, bool thirdParam = true){
DoSomething(index, new ushort[] {}, thirdParam);
}
public void DoSomething(int index, ushort[] array, bool thirdParam = true){
...
}