【问题标题】:are there PHP-like optional parameters in C#?C# 中有类似 PHP 的可选参数吗?
【发布时间】:2009-03-16 14:08:12
【问题描述】:

带有PHP可选参数,如果你不发送参数,它将被赋予一个默认值:

public function getCustomer(id, optionalMessage = "(no message)") {
    ...
}

在 C# 中,我通常使用 C# 方法重载来解决这个问题,例如:

public void GetCustomer(int id) 
{
    ...
}

public void GetCustomer(int id, string optionalMessage)
{
    ...
}

但我错过了实用的 PHP 变体,C# 是否也有一些甜美的语法来执行可选参数,就像在 PHP 示例中一样?

【问题讨论】:

    标签: c# php overloading optional-parameters


    【解决方案1】:

    在 C# 3.0 中没有;此功能已在 C# 4.0 的工作表上提供 - 请参阅 here

    现在,您将不得不使用不同的重载:

    public void Foo(int a) {Foo(a, "");}
    public void Foo(int a, string b) {...}
    

    建议的语法是:

    public void Foo(int a, string b = "") {...}
    

    调用任何一个:

    Foo(123); // use default b
    Foo(123, "abc"); // optional by position
    Foo(123, b: "abc"); // optional  by name
    

    【讨论】:

    • 你的博客文章指出了我问的原因:我看到它几乎可以用命名参数解决(例如在自定义属性中),但它不是 100% 存在(正如你所建议的,必须成为二传手),很好,谢谢
    【解决方案2】:

    不,但您可以在一定程度上模拟它们,特别是如果您的可选参数属于同一类型(或者您不介意进行一些转换)。

    您可以使用 params 标志。

    void paramsExample(object arg1, object arg2, params object[] argsRest) 
    

    但我应该指出,这会失去类型安全性,并且没有参数或顺序的类型强制。

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2018-05-16
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多