使用 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示例中一样吗?
答案 0 :(得分:8)
不在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
答案 1 :(得分:4)
不,但您可以在一定程度上模拟它们,特别是如果您的可选参数属于同一类型(或者您不介意进行某些投射)。
您可以使用params标志。
void paramsExample(object arg1, object arg2, params object[] argsRest)
我应该指出,这会失去类型安全性,并且没有类型强制执行参数或命令。