代码之家  ›  专栏  ›  技术社区  ›  Jaxidian

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

  •  22
  • Jaxidian  · 技术社区  · 14 年前

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

    有什么方法可以改变资源文件的工作方式使之成为可能吗?

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

    ValidationMessages 是资源文件。

    3 回复  |  直到 11 年前
        1
  •  12
  •   Tom Cabanski    14 年前

        2
  •  15
  •   Jon Skeet    14 年前

    一个选项是设置默认值 null 然后适当地填充:

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

    作为真正的价值。

    另一个可能的选择是有一个预构建步骤,它创建了一个充满 const 基于资源的字符串;你可以引用那些常量。不过,这会相当尴尬。

        3
  •  12
  •   Adi Lester    12 年前

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

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

    null 作为 message