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

9

This question already has an answer here:

Passing an empty array as default value of an optional parameter [duplicate] 3 answers

В 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);
    }
}

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

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

Ваш Ответ

2   ответа
15

Is there a correct way to do this, if this is even possible at all?

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

a constant expression; an expression of the form new ValType(), where ValType is a value type, such as an enum or a struct; an expression of the form default(ValType), where ValType is a value type.

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

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

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
11

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

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

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