Подтвердить что ты не робот

Установка значения по умолчанию для параметра С# Необязательный параметр

Всякий раз, когда я пытаюсь установить значение по умолчанию для необязательного параметра в файл ресурса, я получаю ошибку времени компиляции

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

Можно ли каким-либо образом изменить способ работы файлов ресурсов, чтобы сделать это возможным?

public void ValidationError(string fieldName, 
                            string message = ValidationMessages.ContactNotFound)

В этом ValidationMessages - файл ресурсов.

4b9b3361

Ответ 1

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

Ответ 2

Один из вариантов состоит в том, чтобы сделать значение по умолчанию null и затем соответствующим образом заполнить его:

public void ValidationError(string fieldName, string message = null)
{
    string realMessage = message ?? ValidationMessages.ContactNotFound;
    ...
}

Конечно, это работает, только если вы не хотите разрешать null как истинное значение.

Другим потенциальным вариантом будет иметь этап предварительной сборки, который создал файл, полный строк const на основе ресурсов; вы могли бы ссылаться на эти константы. Было бы довольно неудобно.

Ответ 3

Другой вариант состоит в том, чтобы разделить ваш метод на два и иметь один вызов перегрузки другой, например:

public void ValidationError(string fieldName)
{ 
    ValidationError(fieldName, ValidationMessages.ContactNotFound);
}

public void ValidationError(string fieldName, string message)
{
    ...
}

Этот способ также позволяет передать null в качестве значения для message в том случае, если это также допустимое значение для этого параметра.