【发布时间】:2012-12-24 07:55:21
【问题描述】:
有没有办法在c#中使用optional arguments(默认参数)和lambda expressions?我已经阅读了文档,但找不到任何可以说的方式。
为了说明,我可以定义使用可选参数来提供默认值的简单方法,如下所示:
void MyMethod(string arg = "default-value")
{
Console.WriteLine(arg);
}
我想知道我是否能够使用 lambda 表达式做同样的事情。
// gives a syntax error
Action<string> MyMethod = (arg = "default") => Console.WriteLine(arg);
我可以使用委托处理具有默认值的可选参数,但这似乎有点笨拙。
delegate void MyDelegate(string arg = "default");
MyDelegate MyMethod = arg => Console.WriteLine(arg);
或者,我可以检查 lambda 主体中的参数,例如...
Action<string> MyMethod = (arg) => Console.WriteLine(string.IsNullOrEmpty(arg) ?
"default" :
arg);
但这似乎有点笨拙。
是否可以在c#中使用可选参数在lambda表达式中设置默认值?
【问题讨论】:
-
这没有意义。无论如何,你不能在没有参数的情况下调用
Action<String>。 -
@KonstantinVasilcov - 它根本不是重复的 - 我专门询问 lambda 表达式 - 不是简单的方法。我想我已经说清楚了,抱歉。
-
@SLaks 这就是我要问的 - 参数可以是可选的吗?你也不能在没有参数的情况下调用
Method(string arg),但如果你这样做了Method(string arg = "default") -
@Fraser:是的,但这是由您调用的签名定义的。我的观点是,将
Action<string>指向的东西更改为不能 使其合法。
标签: c# lambda optional-parameters