每当我尝试将可选参数的默认值设置为资源文件中的某些内容时,我得到编译时错误
'message'的默认参数值必须是编译时常量。
有什么办法可以改变资源文件的工作方式来实现这个目标吗?
public void ValidationError(string fieldName,
string message = ValidationMessages.ContactNotFound)
在此,ValidationMessages
是资源文件。
答案 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
的值传递,以防它也是该参数的有效值。