Как использовать Environment.NewLine в качестве значения по умолчанию для необязательного параметра - PullRequest
0 голосов
/ 18 декабря 2018

Я предпочитаю Environment.NewLine, чем "\r\n", когда это возможно, хотя этот проект предназначен только для Windows.Мне было интересно, если есть способ использовать его в качестве значения по умолчанию для необязательного параметра.

Рассмотрим метод расширения

public static string ToSummaryString<T>(
    this IEnumerable<T> items, 
    string delimiter = Environment.NewLine)

и ошибка времени компиляции

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

Я тоже пытался использовать атрибуты параметров с похожей судьбой

public static string ToSummaryString<T>(
    this IEnumerable<T> items, 
    [Optional, DefaultParameterValue(Environment.NewLine)] string delimiter)

Anаргумент атрибута должен быть константным выражением, выражением typeof или выражением создания массива типа параметра атрибута

Так есть ли обходной путь?Или мои единственные варианты жестко закодировать его в "\r\n" или сделать его обязательным?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Мне кажется, что лучший способ сделать это - установить значение по умолчанию в NULL, а затем проверить это значение в методе.Если параметр имеет значение null, установите значение по умолчанию "\ r \ n."А еще лучше, чтобы это значение по умолчанию было в файле ресурсов, чтобы вы могли изменить его по мере необходимости без необходимости перекомпиляции приложения.(Помещение значения в конфигурационный файл также работает, конечно)

0 голосов
/ 19 декабря 2018

Вы можете заменить значение по умолчанию на Null и затем использовать нуль-объединяющий оператор внутри вашего метода.Примерно так:

public static string ToSummaryString<T>(this IEnumerable<T> items, string delimiter = null)
{
    var realDelimiter = delimiter ?? Environment.NewLine;
}

В качестве альтернативы вы также можете использовать Перегрузка методов , так как @ Dennis_E также упомянул: напишите 2 метода;один с разделителем и один без .

...