我正在阅读有关Microsoft Docs的Razor教程,并遇到了HTML帮助器中使用的lambda表达式:
@Html.DisplayNameFor(model => model.Movie[0].Title))
电影的类型为IList <电影>,其中电影是在教程中创建的类。作者指出:
“ DisplayNameFor HTML帮助器检查 lambda表达式中引用的 Title 属性以确定显示名称。lambda表达式为检查而不是评估。这意味着当Movie [0]为空或为空时,没有访问冲突。”
我从直觉上了解检查,但这与所说的有何不同
Console.WriteLine(Movie[0].Title)
如果HTML帮助程序看到一个空列表,则没有问题,但是如果控制台方法看到一个空列表,则将引发异常。
我唯一能猜到它是如何工作的方法是在幕后进行尝试/捕获。
答案 0 :(得分:2)
显示名称表示属性本身的名称,即"Title"
或属性的Display
属性中定义的字符串值(如果属性有一个,即:
public class Movie
{
[Display(Name = "Movie Title")]
public string Title { get; set; }
}
我们可以看到它并不关心Title
属性的 value ,因此它不需要评估,因此,如果这部电影是空的。
答案 1 :(得分:2)
只想在Saeb Amini的回答中添加一些内容。
Metadata
来获取表达式中该属性的显示名称,因此不会导致任何异常即使object为null。最后,要回答您的问题,评估是指您实际对结果(调用)的lamda表达式求值,而检查是当您检查lamda表达式的各种属性时。