Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么之前我可以使用任何字母=>;在lambda表达式中,它将如何转换为标准语法_C#_Asp.net Mvc_Lambda - Fatal编程技术网

C# 为什么之前我可以使用任何字母=>;在lambda表达式中,它将如何转换为标准语法

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

我已经尝试理解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.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
参数未以任何方式使用,代码内部