23

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

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

有什么方法可以改变资源文件的工作方式来实现这一点?

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

其中,ValidationMessages是一个资源文件。

4

3 回答 3

15

一种选择是设置默认值null,然后适当地填充它:

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

当然,这仅在您不想允许null作为真正价值的情况下才有效。

另一个可能的选择是有一个预构建步骤,它const根据资源创建一个充满字符串的文件;然后你可以引用这些常量。不过会比较尴尬。

于 2010-04-28T13:09:07.190 回答
12

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

于 2010-04-28T13:08:58.627 回答
12

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

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

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

null这种方式还使您可以作为值传递message,以防万一这也是该参数的有效值。

于 2012-02-19T12:16:37.740 回答