Вопрос по arrays, c#, parameters, optional-parameters, default-value – Значение по умолчанию для массива параметров метода [duplicate]

9

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

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

В c # можно использовать значения параметров по умолчанию в методе, например:

public void SomeMethod(String someString = "string value")
{
    Debug.WriteLine(someString);
}

Но теперь я хочу использовать массив в качестве параметра в методе и установить для него значение по умолчанию.

Я думал, что это должно выглядеть примерно так:

public void SomeMethod(String[] arrayString = {"value 1", "value 2", "value 3"})
{
    foreach(someString in arrayString)
    {
        Debug.WriteLine(someString);
    }
}

Но это не работает.

Есть ли правильный способ сделать это, если это вообще возможно?

Существует обходной путь для ссылочных типов. Установите аргумент по умолчанию "ноль", Затем внутри блока кода проверьте, установлен ли для параметра значение NULL, если для него задано значение NULL, установите значение по умолчанию для параметра ссылочного типа. Bill Moore
Определить "не работает". Tudor

Ваш Ответ

2   ответа
11

Попробуй это:

public void SomeMethod(String[] arrayString = null)
{
    arrayString = arrayString ?? {"value 1", "value 2", "value 3"};
    foreach(someString in arrayString)
    {
        Debug.WriteLine(someString);
    }
}
someMethod();
Вы'Добро пожаловать Nathan
+1 Это ловкий подход, но это не такдает вам возможность различать пользователя, передающего значение NULLэксплицитно и просто не используя параметр (именно поэтому я обычно предпочитаю подход с перегрузкой). Это может или не может быть важным в этом случае. Reed Copsey
Это'Хорошо, я решил, изменив его наarrayString = arrayString ?? new int[] { 0 }; John
Спасибо за ваш вклад. Кажется, это хороший путь, но я собираюсь придерживаться Рида.s ответ на этот вопрос, потому что он пригодится и в некоторых других отношениях для меня. Gabi Barrientos
Как насчетint[] arrayString? Я пробовал сarrayString = arrayString ?? { 0 }; но я получил ошибку компилятораCS1525: Invalid expression term '{' John
15

Есть ли правильный способ сделать это, если это вообще возможно?

Это невозможно (напрямую), так как значение по умолчанию должно быть одним из следующих (отНеобязательные аргументы):

постоянное выражение;выражение формы new ValType (), где ValType является типом значения, таким как enum или struct;выражение формы по умолчанию (ValType), где ValType является типом значения.

Создание массива неt подходит любое из возможных значений по умолчанию для необязательных аргументов.

Лучший вариант - перегрузка:

public void SomeMethod()
{
    SomeMethod(new[] {"value 1", "value 2", "value 3"});
}


public void SomeMethod(String[] arrayString)
{
    foreach(someString in arrayString)
    {
        Debug.WriteLine(someString);
    }
}
Хорошо спасибо. Я пойду на это. Я приму это как ответ через 11 минут. Gabi Barrientos

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