C# 为什么DisplayNameFor()中需要lambda表达式?

C# 为什么DisplayNameFor()中需要lambda表达式?,c#,asp.net-mvc,C#,Asp.net Mvc,对于示例代码: <th>@Html.DisplayNameFor(model => model.Artist.Name)</th> @Html.DisplayNameFor(model=>model.Artist.Name) 为什么lambda表达式是必需的?为什么不能就这样 <th>@Html.DisplayNameFor(model.Artist.Name)</th> @Html.DisplayNameFor(model.Artis

对于示例代码:

<th>@Html.DisplayNameFor(model => model.Artist.Name)</th>
@Html.DisplayNameFor(model=>model.Artist.Name)
为什么lambda表达式是必需的?为什么不能就这样

<th>@Html.DisplayNameFor(model.Artist.Name)</th>
@Html.DisplayNameFor(model.Artist.Name)

这是使用表达式树的诡计

第一种方法在运行时构造一个表达式树,允许方法进入并查找正在访问的成员(从而获取其所有属性)


第二种方法只需将
Name
的值传递给该方法。

这是使用表达式树的诡计

第一种方法在运行时构造一个表达式树,允许方法进入并查找正在访问的成员(从而获取其所有属性)


第二种方法只需将
Name
的值传递给该方法。

请记住,您的模型只是一般数据结构的定义,在运行时,这一点会根据用于访问数据的参数确定模型的实际值

您看到的只是DisplayNameFor方法的定义方式,您的第二行代码完全无效。DisplayNameFor是HTML帮助程序的一个扩展方法,它接受一个lambda表达式作为单个参数,该表达式标识要显示的模型和模型的属性,以便在运行时进行实际的数据检索。有关方法的正式定义,请参见此处:


请记住,您的模型只是一般数据结构的一个定义,在运行时,它会根据用于访问数据的参数确定模型的实际值

您看到的只是DisplayNameFor方法的定义方式,您的第二行代码完全无效。DisplayNameFor是HTML帮助程序的一个扩展方法,它接受一个lambda表达式作为单个参数,该表达式标识要显示的模型和模型的属性,以便在运行时进行实际的数据检索。有关方法的正式定义,请参见此处:


第二个语法是否有效?有效语法,是的。但是没有定义具有该签名的方法,
model
也可能不是。第二个方法是有效语法吗?有效语法,是的。但是没有定义具有该签名的方法,
model
也可能没有定义。