在 C# lambda 中使用大括号和不使用大括号时有什么区别?[复制]

What is the difference in C# lambda when the curly braces are used and when not? [duplicate]

提问人:manymanymore 提问时间:6/7/2023 更新时间:6/7/2023 访问量:66

问:

在 C# lambda 中使用大括号和不使用大括号时有什么区别?

我正在做一个项目,我们有以下一段代码:

public void Configure(IApplicationBuilder app)
{
    ... //some other code goes here
    app.UseEndpoints(endpoint => endpoint.MapControllers());

    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}

和 之间有什么区别吗?为什么会被叫两次?{ endpoints.MapControllers(); }endpoint.MapControllers()MapControllers

C# asp.net Lambda 中间件 大括号

评论


答:

2赞 Giovanni Georgo 6/7/2023 #1

在第一行中,没有大括号,这意味着它是一个单一的语句 lambda 表达式。它直接对 endpoint 参数调用 MapControllers 方法。app.UseEndpoints(endpoint => endpoint.MapControllers());

在第二行中,大括号用于定义代码块。如果需要,它允许您包含多个语句。app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

至于为什么MapControllers被调用了两次,在这种情况下似乎是多余的。这两行代码在功能上是等效的,并且实现了将控制器映射到端点的相同结果。

2赞 preetham-p-m 6/7/2023 #2

在第一种情况下,如果没有大括号,它将返回计算表达式的值

app.UseEndpoints(endpoint => endpoint.MapControllers());

在第二种情况下,如果有大括号,它将允许您添加多个语句,最后您需要显式调用 return 语句来获取计算值。

app.UseEndpoints(endpoints => 
{ 
   other statements ...
   return endpoints.MapControllers(); 
});

声明一次就足够了,不知道为什么要写两次,你可以删除其中一个,并根据 lamda 表达式进行相应的更改。MapController

评论

2赞 Dai 6/7/2023
“在第一种情况下,没有大括号,它将返回计算表达式的值” - 除非 lambda 的委托是void