您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

缺少左侧参数将转换为不带参数的函数,因此(() => 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表达式的左侧部分无关紧要。

其他 2022/1/1 18:19:00 有515人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶