List Find()抛出Null Exception但应该给出一个空字符串

时间:2016-06-30 23:16:26

标签: c#

在C#中,我有一个具有固定数量项目的List,准确地说是6。通过使用Find()在Razor模板中调用它们。但是,如果该查找无法找到关联的列表项,则会抛出NullReference异常。

问题是,如果某个项目不存在,那么该视图将无法加载。

我需要它来为变量提供一个空字符串。

我试过了:

var video1 = Model.Videos.FirstOrDefault(x => x.VideoType == "Video1") ?? string.Empty;

但是这仍然会返回null。

有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您可以使用C# : The New and Improved C# 6.0

中描述的零传播运算符

使用的一个例子是:

var video1 = Model?.Videos?.FirstOrDefault(x => x.VideoType == "Video1") ?? string.Empty;

以上内容将确保NullReferenceExceptionModelVideos时不会抛出null

答案 1 :(得分:2)

它正在抛出NullReferenceException,因为你试图在null对象上获取属性/调用函数。

查看您的代码,我们在Videos上呼叫Model,然后在FirstOrDefault上呼叫Videos

抛出NullReferenceException意味着:

  • Model为空,因此当您致电Model.Videos时,您会收到NullReferenceException(因为您无法获取null的属性Videos
  • Videos为空,因此当您致电Videos.FirstOrDefault时,您会收到NullReferenceException(因为您无法在null上调用函数FirstOrDefault