Установка значения по умолчанию для необязательного параметра C # - PullRequest
22 голосов
/ 28 апреля 2010

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

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

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

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

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

Ответы [ 3 ]

15 голосов
/ 28 апреля 2010

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

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

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

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

12 голосов
/ 28 апреля 2010

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

11 голосов
/ 19 февраля 2012

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

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

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

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

...