gpt4 book ai didi

c# - 我想了解 @Html.DisplayFor(modelItem => item.FirstName) 中的 lambda 表达式

转载 作者:IT王子 更新时间:2023-10-29 03:52:18 24 4
gpt4 key购买 nike

我是 C# 和 MVC 的新手,在某些情况下使用过 lambda,例如匿名方法和 LINQ。

通常我看到的 lambda 表达式看起来像这样:

(x => x.Name), (x => { Console.WriteLine(x))

我知道 lambda =“去”。我从未见过不使用左参数的 lambda 表达式。

虽然我不知道如何翻译这个 lambda 表达式

@Html.DisplayFor(modelItem => item.FirstName)

任何人都可以为我阐明这一点吗?这不应该是

(modelItem => modelItem.FirstName)?

我从微软的 Introduction to ASP.NET MVC tutorial 得到这个.

最佳答案

lambda 表达式是一种编写匿名函数的方法,即没有名称的函数。 “箭头”左侧是函数参数,右侧是函数体。因此,(x => x.Name) 在逻辑上转换为类似 string Function(Data x) { return x.Name } 类型的 stringData 显然会有所不同并从上下文中派生。

缺少左侧参数转换为无参数函数,因此此 (() => someVariable) 在逻辑上转换为:string Function() { return someVariable ; }

此时你可能会开始怀疑,someVariable 是从哪里来的,它不是函数参数,也没有在函数中定义。你是对的,像这样的函数永远不会编译。然而,像这样的 lambda 函数非常好,因为它允许以这种方式提升和使用外部作用域变量。 (在内部创建一个包装类,其中 lambda 表达式中使用的变量成为字段。)

现在让我们看看 model => item.FirstName 是什么意思。从逻辑上讲,它将转换为 string Function(Model model) { return item.FirstName; }。基本上这是一个带参数的函数,但是这个参数并没有被使用。

现在,最后一点信息。尽管 lambda 表达式最终表示函数,但有时创建它们并不是为了实际执行(尽管它们可能会执行)。 lambda 表达式可以用表达式树的形式表示。这意味着可以解析而不是执行它。

在这种特殊情况下,MVC 引擎不会运行 lambda 表达式表示的函数。相反,表达式被解析,以便 MVC 引擎知道要为该特定行发出什么 html。如果您的数据项不是直接来自您的模型对象,则 lambda 表达式的左侧部分无关紧要。

关于c# - 我想了解 @Html.DisplayFor(modelItem => item.FirstName) 中的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com