在C#中有类似PHP的可选参数吗?

时间:2009-03-16 14:08:12

标签: c# php overloading optional-parameters

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

2 个答案:

答案 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) 

我应该指出,这会失去类型安全性,并且没有类型强制执行参数或命令。