C# 4.0: значения по умолчанию параметра Метода как массив

Действительно ли это возможно в параметрах C# 4.0 значений по умолчанию метода как массив (для напр. строка [] sArray)? если да, как реализовать его?

Я попробовал, вызывают функцию как ниже:

MethodA(string[] legends=new string[]{"a","b"},float[] values=new float[]{1,2}, string alt="sd");

Это не работа

6
задан loviji 29 June 2010 в 06:45
поделиться

2 ответа

Как уже было сказано, значения по умолчанию не могут быть массивами. Однако, один из способов избежать этого - сделать значение по умолчанию нулевым, а затем инициализировать массив при необходимости:

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 в качестве кодировки по умолчанию.

Если вам нужен параметр типа значения, вы можете просто сделать его nullable. Например, если вы хотите задать параметром по умолчанию количество процессоров (которое явно не является константой времени компиляции), вы можете сделать так:

public void RunInParallel(int? cores = null)
{
    int realCores = cores ?? Environment.ProcessorCount;
}
10
ответ дан 8 December 2019 в 18:32
поделиться

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

Стандарт (стр. 312) гласит следующее:

Выражение в аргументе по умолчанию должно быть одним из следующих:

  • константное выражение
  • выражение формы new S () где S - тип значения
  • выражение вида по умолчанию (S), где S - тип значения
3
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: