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