提问人:manymanymore 提问时间:6/7/2023 更新时间:6/7/2023 访问量:66
在 C# lambda 中使用大括号和不使用大括号时有什么区别?[复制]
What is the difference in C# lambda when the curly braces are used and when not? [duplicate]
问:
在 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
答:
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
评论