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

发布于 2024-07-15 07:42:59 字数 423 浏览 7 评论 0原文

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

with PHP optional parameters, if you don't send a parameter it will be assigned to a default value:

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

in C# I generally solve this with C# method overloading, e.g.:

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

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

but I miss the pragmatic PHP variant, does C# also have some sugary syntax to do optional parameters as well, as in the PHP example?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小清晰的声音 2024-07-22 07:42:59

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

Not in C# 3.0; this feature is on the sheet for C# 4.0 - see here.

For now, you'll have to use different overloads:

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

The proposed syntax would be:

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

called with any of:

Foo(123); // use default b
Foo(123, "abc"); // optional by position
Foo(123, b: "abc"); // optional  by name
我最亲爱的 2024-07-22 07:42:59

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

您可以使用 params 标志。

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

但我应该指出,这会失去类型安全性,并且不会对参数或顺序进行类型强制。

No, but you can simulate them to an extent, particularly if your optional parameters are of the same type (or you don't mind doing some casting).

You can use the params flag.

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

I should point out though, this loses type safety, and there is no type enforcement of the parameters or order.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文