【问题标题】:Setting the default value of a C# Optional Parameter设置 C# 可选参数的默认值
【发布时间】:2011-02-13 08:26:07
【问题描述】:

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

的编译时错误

“消息”的默认参数值必须是编译时常量。

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

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

其中ValidationMessages是一个资源文件。

【问题讨论】:

    标签: c# default-value optional-parameters


    【解决方案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 的值传递,以防这也是该参数的有效值。

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 2011-03-03
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多