我有一张表格,其中包含指向特定影院网站的链接。我想检索给定影院的第一个链接。我的代码设置变量:
Dim link As String = TheaterLinks.Where(Function(x) x.TheaterID = TheaterID).FirstOrDefault().Link
如果没有结果(有些剧院没有任何链接),那么我得到:
Object reference not set to an instance of an object.
我该怎么做?我试过了:
Dim link As String = Links.Where(Function(x) x.TheaterID = TheaterID.DefaultIfEmpty().First().Link
但是我无法弄清楚要放在DefaultIfEmpty()中的内容。我尝试了DefaultIfEmpty("")和DefaultIfEmpty(blankstringvariable),但后来我得到了:
Value of type 'String' cannot be converted to type 'TheaterLink'.
答案 0 :(得分:3)
问题是允许FirstOrDefault()
返回null
,在这种情况下,访问Link
属性会引发异常。
如果您使用VB.NET 14,请为自动空值检查添加问号:
Dim link As String = TheaterLinks.Where(Function(x) x.TheaterID = TheaterID).FirstOrDefault()?.Link
(请参阅?.Link
而不是.Link
)
否则,分两个阶段进行:首先,使用FirstOrDefault
获取对象,然后使用If
语句手动进行空值检查。
答案 1 :(得分:0)
对于我的原始示例,我只需要添加一个问号:
Dim link As String = Links.Where(Function(x) x.ID = id).FirstOrDefault()?.Link
我尝试在我的模型中执行此操作并得到一个" Nullable对象必须具有值"错误,所以我做了两阶段的方法:
Dim eventDate = Events.Where(Function(x) x.ID = id).FirstOrDefault()?.EventDate
If eventDate.HasValue Then
'some code
Else
'some code
End If