C# 检查和评估之间有什么区别?
我正在阅读有关Microsoft Docs的教程,遇到了HTML帮助程序中使用的lambda表达式:C# 检查和评估之间有什么区别?,c#,asp.net,razor,lambda,C#,Asp.net,Razor,Lambda,我正在阅读有关Microsoft Docs的教程,遇到了HTML帮助程序中使用的lambda表达式: @Html.DisplayNameFor(model => model.Movie[0].Title)) Movie是IList类型,其中Movie是在教程中创建的类。提交人说: “DisplayName for HTML Helper检查lambda表达式中引用的标题属性以确定显示名称。lambda表达式是检查而不是评估的。这意味着当电影[0]为null或为空时,不存在访问冲突。” 我
@Html.DisplayNameFor(model => model.Movie[0].Title))
Movie是IListConsole.WriteLine(Movie[0].Title)
如果HTML助手看到空列表,则没有问题,但是如果console方法看到空列表,则会引发异常
我能猜出它是如何工作的唯一方法是,在幕后有一个try/catch在起作用。显示名称意味着属性本身的名称,即
“Title”
,或者属性上的显示
属性中定义的字符串值(如果属性有),即:
public class Movie
{
[Display(Name = "Movie Title")]
public string Title { get; set; }
}
我们可以看到,它不关心
Title
属性的值,因此它不需要对其求值,因此如果电影为空,它不会抛出。只想在Saeb Amini的答案中添加一些东西
元数据
,以获取表达式中属性的显示名称,因此即使对象为null,也不会导致任何异常