为什么此代码会生成null异常:
Public Function MessageCount(ByVal mId As Long) As Integer
Dim messages As List(Of InboxMessage) = Nothing
Using ctx As New UFCWEntities.UFCWEntities
Dim allMessageIds = ctx.InboxLinks.Where(Function(o) o.MemberId = mId).ToList()
For Each i As InboxLink In allMessageIds
messages.Add(ctx.InboxMessages.FirstOrDefault(Function(o) o.InboxMessageId = i.InboxMessageId))
Next
End Using
If Not IsNothing(messages) Then
Return messages.Count()
End If
Return 0
End Function
尝试执行message.Add
时会生成异常答案 0 :(得分:1)
您收到此错误是因为ctx.InboxMessages.FirstOrDefault(...)
返回null。
您应首先进行空检查,例如:
For Each i As InboxLink In allMessageIds
Dim firstMsg = ctx.InboxMessages.FirstOrDefault(...)
If Not IsNothing(firstMsg) Then
messages.Add(firstMsg)
End If
Next
答案 1 :(得分:0)
您没有实例化您的消息变量,因此当您尝试添加到它时,它不会因为消息仍然是Nothing。将第一行更改为
Dim messages As New List(Of InboxMessage)
话虽如此,您可能需要考虑将整个操作视为基于集合的操作。如果你想要做的就是过滤它们并计算过滤后的结果,你就不需要给物体加水。从您提供的代码中,您应该能够将其简化为:
Using ctx As New UFCWEntities.UFCWEntities
return ctx.InboxLinks.Count(function(o) o.MemberId = mId)
End Using