2

使用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 示例中一样?

4

2 回答 2

8

不在 C# 3.0 中;此功能在 C# 4.0 的工作表上 - 请参见此处

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

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
于 2009-03-16T14:08:50.250 回答
4

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

您可以使用 params 标志。

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

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

于 2009-03-16T14:19:13.097 回答