C# 为什么之前我可以使用任何字母=>;在lambda表达式中,它将如何转换为标准语法
我已经尝试理解lambda表达式很长时间了(多次尝试) 在Razor视图中,我在C# 为什么之前我可以使用任何字母=>;在lambda表达式中,它将如何转换为标准语法,c#,asp.net-mvc,lambda,C#,Asp.net Mvc,Lambda,我已经尝试理解lambda表达式很长时间了(多次尝试) 在Razor视图中,我在I收集注释上有一个foreach循环,其中模型属于产品 @foreach (var comment in Model.Comments) { <p> @Html.DisplayFor(m => comment.TimeStamp)</p> } @foreach(Model.Comments中的var注释){ @Html.DisplayFor(m=>comment
I收集注释
上有一个foreach
循环,其中模型
属于产品
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(m => comment.TimeStamp)</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(m=>comment.TimeStamp)
}
我不明白为什么我可以在表达式中使用=>
之前的任何字母,但它仍然有效。如果这不重要,为什么我必须在=>
之前写任何东西
它将如何转换(如果可能的话)为标准方法语法?在您的示例中,
m
是函数的参数,用于将注释的值传递给函数。但是,使用lambda,您仍然可以访问直接使用的注释。不使用该参数并不意味着可以删除它
因此,您可以将代码段重写为:
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(m => m.TimeStamp)</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(m=>m.TimeStamp)
}
在您的示例中,m
是函数的参数,用于将comment
的值传递给函数。但是,使用lambda,您仍然可以访问直接使用的注释。不使用该参数并不意味着可以删除它
因此,您可以将代码段重写为:
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(m => m.TimeStamp)</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(m=>m.TimeStamp)
}
在您的示例中,m
是函数的参数,用于将comment
的值传递给函数。但是,使用lambda,您仍然可以访问直接使用的注释。不使用该参数并不意味着可以删除它
因此,您可以将代码段重写为:
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(m => m.TimeStamp)</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(m=>m.TimeStamp)
}
在您的示例中,m
是函数的参数,用于将comment
的值传递给函数。但是,使用lambda,您仍然可以访问直接使用的注释。不使用该参数并不意味着可以删除它
因此,您可以将代码段重写为:
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(m => m.TimeStamp)</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(m=>m.TimeStamp)
}
理解lambda本质上是匿名函数声明非常重要
1) 我不明白为什么我可以在表达式中使用任何before=>字母,但它仍然有效
m
只是参数名。您可以编写@Html.DisplayFor(m=>m.TimeStamp)
或@Html.DisplayFor(i=>i.TimeStamp)
,它(在本例中!-请参阅)在功能上与您的代码相同(但效率更高)
代码工作的原因是,m
参数没有以任何方式使用,而lambda内部的代码(实际上是函数体)使用函数外部声明的变量(在=>
之后的代码)。这就是所谓的-它的效率较低,有许多陷阱,但可以非常有用
2) 如果这不重要,为什么我必须在=>之前写任何东西
因为@Html.DisplayFor
方法被声明为接受Func
参数,您可以将其读取为“接受一个参数(模型)并返回单个值的函数”
3) 使用普通(匿名)方法语法:
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(delegate(CommentsType c) { return c.TimeStamp; })</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(委托(CommentsType c){return c.TimeStamp;})
}
…其中,CommentsType
是模型的类型。Comments
属性必须理解lambda本质上是匿名函数声明
1) 我不明白为什么我可以在表达式中使用任何before=>字母,但它仍然有效
m
只是参数名。您可以编写@Html.DisplayFor(m=>m.TimeStamp)
或@Html.DisplayFor(i=>i.TimeStamp)
,它(在本例中!-请参阅)在功能上与您的代码相同(但效率更高)
代码工作的原因是,m
参数没有以任何方式使用,而lambda内部的代码(实际上是函数体)使用函数外部声明的变量(在=>
之后的代码)。这就是所谓的-它的效率较低,有许多陷阱,但可以非常有用
2) 如果这不重要,为什么我必须在=>之前写任何东西
因为@Html.DisplayFor
方法被声明为接受Func
参数,您可以将其读取为“接受一个参数(模型)并返回单个值的函数”
3) 使用普通(匿名)方法语法:
@foreach (var comment in Model.Comments) {
<p> @Html.DisplayFor(delegate(CommentsType c) { return c.TimeStamp; })</p>
}
@foreach(Model.Comments中的var注释){
@Html.DisplayFor(委托(CommentsType c){return c.TimeStamp;})
}
…其中,CommentsType
是模型的类型。Comments
属性必须理解lambda本质上是匿名函数声明
1) 我不明白为什么我可以在表达式中使用任何before=>字母,但它仍然有效
m
只是参数名。您可以编写@Html.DisplayFor(m=>m.TimeStamp)
或@Html.DisplayFor(i=>i.TimeStamp)
,它(在本例中!-请参阅)在功能上与您的代码相同(但效率更高)
代码工作的原因是,m
参数未以任何方式使用,代码内部