设置C#可选参数的默认值

时间:2010-04-28 13:07:16

标签: c# default-value optional-parameters

每当我尝试将可选参数的默认值设置为资源文件中的某些内容时,我得到编译时错误

  

'message'的默认参数值必须是编译时常量。

有什么办法可以改变资源文件的工作方式来实现这个目标吗?

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

在此,ValidationMessages是资源文件。

3 个答案:

答案 0 :(得分:15)

一个选项是设置默认值null,然后适当填充:

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

当然,只有在您不希望null作为真正的价值时,这才有效。

另一个可能的选择是进行预构建步骤,根据资源创建一个充满const个字符串的文件;然后你可以引用那些争论。但这会很尴尬。

答案 1 :(得分:12)

不,您将无法直接在默认情况下使资源正常工作。您需要做的是将默认值设置为null,然后在参数在方法体中具有默认值时执行资源查找。

答案 2 :(得分:11)

另一种选择是将你的方法分成两个,并让一个重载调用另一个,如下所示:

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

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

这种方式还允许您将null作为message的值传递,以防它也是该参数的有效值。