C # 4.0: значения параметров метода по умолчанию в виде массива - PullRequest
6 голосов
/ 29 июня 2010

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

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

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

Это не работа

Ответы [ 2 ]

10 голосов
/ 29 июня 2010

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

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;
}
3 голосов
/ 29 июня 2010

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

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

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

  • константное выражение
  • выражение формы new S (), где S - тип значения
  • выражениеформа по умолчанию (S), где S - тип значения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...