在C#中,我有一个具有固定数量项目的List,准确地说是6。通过使用Find()在Razor模板中调用它们。但是,如果该查找无法找到关联的列表项,则会抛出NullReference异常。
问题是,如果某个项目不存在,那么该视图将无法加载。
我需要它来为变量提供一个空字符串。
我试过了:
var video1 = Model.Videos.FirstOrDefault(x => x.VideoType == "Video1") ?? string.Empty;
但是这仍然会返回null。
有人可以帮忙解决这个问题吗?
答案 0 :(得分:3)
您可以使用C# : The New and Improved C# 6.0
中描述的零传播运算符使用的一个例子是:
var video1 = Model?.Videos?.FirstOrDefault(x => x.VideoType == "Video1") ?? string.Empty;
以上内容将确保NullReferenceException
或Model
为Videos
时不会抛出null
。
答案 1 :(得分:2)
它正在抛出NullReferenceException
,因为你试图在null
对象上获取属性/调用函数。
查看您的代码,我们在Videos
上呼叫Model
,然后在FirstOrDefault
上呼叫Videos
。
抛出NullReferenceException
意味着:
Model
为空,因此当您致电Model.Videos
时,您会收到NullReferenceException
(因为您无法获取null的属性Videos
)Videos
为空,因此当您致电Videos.FirstOrDefault
时,您会收到NullReferenceException
(因为您无法在null上调用函数FirstOrDefault
。