Передача пустого массива в качестве значения по умолчанию необязательного параметра [дубликат]


этот вопрос уже есть ответ здесь:

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

public void DoSomething(int index, ushort[] array = new ushort[] {},
 bool thirdParam = true)

результаты:

значение параметра по умолчанию для 'array' должно быть a константа времени компиляции.

3 64

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){

      ...
   }