我对 C# 和 MVC 相当陌生,并且在某些场合使用过 lambda,例如匿名方法和 LINQ。
通常我看到的 lambda 表达式看起来像这样:
(x => x.Name), (x => { Console.WriteLine(x))
我知道 lambda =“去”。我从未见过不使用左参数的 lambda 表达式。
我不知道如何翻译这个 lambda 表达式
@Html.DisplayFor(modelItem => item.FirstName)
谁能帮我解释一下这个问题吗?这不应该是
(modelItem => modelItem.FirstName)?
我从微软得到这个ASP.NET MVC 教程简介.
lambda 表达式是一种编写匿名函数(即没有名称的函数)的方法。 “箭头”左侧是函数参数,右侧是函数体。因此,(x => x.Name)
逻辑上可以翻译成类似的东西string Function(Data x) { return x.Name }
类型string
and Data
显然会有所不同,并且是从上下文中得出的。
缺少左侧参数会转化为没有参数的函数,因此(() => someVariable)
逻辑上可以翻译成这样:string Function() { return someVariable; }
此时您可能会开始想知道,在哪里someVariable
来自,它不是函数参数,也没有在函数中定义。你是对的,这样的函数永远不会编译。然而,像这样的 lambda 函数非常好,因为它允许以这种方式提升和使用外部作用域变量。 (在内部创建一个包装类,其中 lambda 表达式中使用的变量成为字段。)
现在让我们看看是什么model => item.FirstName
方法。从逻辑上讲它会翻译成string Function(Model model) { return item.FirstName; }
。基本上这是一个带参数的函数,但是这个参数并没有被使用。
现在,最后一点信息。尽管 lambda 表达式最终代表函数,但有时创建它们并不是为了实际执行(尽管它们可能可以)。 lambda 表达式可以用表达式树的形式表示。这意味着可以不执行它parsed.
在这种特殊情况下,MVC 引擎不会runlambda 表达式表示的函数。相反,表达式是parsed这样 MVC 引擎就知道要为该特定行发出什么 html。如果您的数据项不是直接来自模型对象,则 lambda 表达式的左侧部分并不重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)