设置C#可选参数的默认值
每当我试图将可选参数的默认值设置为资源文件中的某个内容时,就会出现编译时错误 “message”的默认参数值必须是编译时常量 是否有任何方法可以更改资源文件的工作方式,使之成为可能设置C#可选参数的默认值,c#,default-value,optional-parameters,C#,Default Value,Optional Parameters,每当我试图将可选参数的默认值设置为资源文件中的某个内容时,就会出现编译时错误 “message”的默认参数值必须是编译时常量 是否有任何方法可以更改资源文件的工作方式,使之成为可能 public void ValidationError(string fieldName, string message = ValidationMessages.ContactNotFound) 在这种情况下,ValidationMessages是一个资源
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
字符串的文件;然后可以引用这些常量。但这会相当尴尬。另一种选择是将方法分成两部分,并让一个重载调用另一个,如下所示:
public void ValidationError(string fieldName)
{
ValidationError(fieldName, ValidationMessages.ContactNotFound);
}
public void ValidationError(string fieldName, string message)
{
...
}
这种方法还允许您将
null
作为message
的值传递,以防该值也是该参数的有效值。这正是我所担心的。我真的很喜欢它告诉开发人员字符串将是什么的开发时间便利性:我意识到我所要求的(编译资源文件)扼杀了它存在的部分原因,但我使用它不是为了本地化和动态更改,而是作为重用字符串的公共存储。这是我害怕的。我真的很喜欢它告诉开发人员字符串将是什么的开发时间便利性:我意识到我所要求的(编译资源文件)扼杀了它存在的部分原因,但我使用它不是为了本地化和动态更改,而是作为重用字符串的公共存储。