设置 C# 可选参数的默认值
Posted
技术标签:
【中文标题】设置 C# 可选参数的默认值【英文标题】:Setting the default value of a C# Optional Parameter 【发布时间】:2011-02-13 08:26:07 【问题描述】:每当我尝试将可选参数的默认值设置为资源文件中的某些内容时,我都会收到
的编译时错误“消息”的默认参数值必须是编译时常量。
有什么方法可以改变资源文件的工作方式来实现这一点?
public void ValidationError(string fieldName,
string message = ValidationMessages.ContactNotFound)
其中ValidationMessages
是一个资源文件。
【问题讨论】:
【参考方案1】:不,您将无法使资源直接在默认情况下工作。您需要做的是将默认值设置为 null 之类的值,然后当参数在方法体中具有默认值时进行资源查找。
【讨论】:
这就是我害怕的。我真的很喜欢它告诉开发人员字符串将是什么的开发时便利性:jaxidian.org/optparam.jpg 我意识到我所要求的(编译资源文件)杀死了它存在的部分原因,但我正在使用它不是用于本地化和动态更改,而是用作重用字符串的公共存储。【参考方案2】:一种选择是设置默认值null
,然后适当地填充:
public void ValidationError(string fieldName, string message = null)
string realMessage = message ?? ValidationMessages.ContactNotFound;
...
当然,这仅在您不希望将 null
作为真实值时才有效。
另一个可能的选择是有一个预构建步骤,它根据资源创建一个包含const
字符串的文件;然后你可以引用这些常量。不过这会很尴尬。
【讨论】:
这就是我害怕的。我真的很喜欢它告诉开发人员字符串将是什么的开发时便利性:jaxidian.org/optparam.jpg 我意识到我所要求的(编译资源文件)杀死了它存在的部分原因,但我正在使用它不是用于本地化和动态更改,而是用作重用字符串的公共存储。【参考方案3】:另一种选择是将您的方法一分为二,让一个重载调用另一个,如下所示:
public void ValidationError(string fieldName)
ValidationError(fieldName, ValidationMessages.ContactNotFound);
public void ValidationError(string fieldName, string message)
...
这种方式还允许您将null
作为message
的值传递,以防这也是该参数的有效值。
【讨论】:
以上是关于设置 C# 可选参数的默认值的主要内容,如果未能解决你的问题,请参考以下文章