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

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

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

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

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

在此, ValidationMessages是一个资源文件。

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

一种选择是将默认值设为null ,然后适当填充:

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

当然,这仅在您不希望将null作为真值时才有效。

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

另一个选择是将方法拆分为两个,并让一个重载调用另一个,如下所示:

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

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