Как уже говорили другие, значения по умолчанию не могут быть массивами.Однако один из способов избежать этого - обнулить значение по умолчанию, а затем инициализировать массив, если необходимо:
public void Foo(int[] x = null)
{
x = x ?? new int[] { 5, 10 };
}
Или, если вы не собираетесь изменять массив или предоставлять его вызывающей стороне:
private static readonly int[] FooDefault = new int[] { 5, 10 };
public void Foo(int[] x = null)
{
x = x ?? FooDefault;
}
Обратите внимание, что предполагается, что null
не является значением, которое вы хотите использовать по любой другой причине.Это не глобально применимая идея, но она хорошо работает в некоторых случаях, когда вы не можете выразить значение по умолчанию как константу времени компиляции.Вы можете использовать то же самое для таких вещей, как Encoding.UTF8
в качестве кодировки по умолчанию.
Если вам нужен параметр типа значения, вы можете просто сделать его обнуляемым.Например, предположим, что вы хотите установить параметр по умолчанию в число процессоров (которое явно не является константой времени компиляции), которое вы можете сделать:
public void RunInParallel(int? cores = null)
{
int realCores = cores ?? Environment.ProcessorCount;
}