我有一个难以解决的古怪问题:
我有一个使用LINQ查询执行许多不同搜索的表单。 99%的时间代码将执行正常,没有任何错误,但是,在总随机时间,我的表单落在下面一行:
'Find all tickets belonging to a user
Dim _userTicketsList As List(Of Ticket) = Tickets.FindAll(Function(p)
p.ticket_firstname.ToUpper = NewSearchString And
CDate(p.ticket_created_at.Value.ToShortDateString) >= date1
And CDate(p.ticket_created_at.Value.ToShortDateString) <= date2)
我得到的错误是Object Reference Not Set To An Instance Of An Object
从那时起,任何搜索都将继续轰炸这一行代码,直到我重启我的应用程序。我再次执行搜索,一切正常。
我无法理解导致此错误发生的原因。如果.FindAll
返回0结果或者返回任意数量的结果,则会发生这种情况。
无论如何,我可以确定Object正在尝试设置什么?我假设它是_userTicketsList
但是它有意义为什么有时候它有效并且有时候它没有。
我知道在没有看到每一段代码的情况下可能很难评论,但无论如何我可以尝试以不同方式调试吗?调试器位于这行代码上,包含23,000多个Ticket
项,因此,如果导致问题的特定Ticket
,我甚至无法解决问题。
非常感谢任何帮助或指导。 感谢
答案 0 :(得分:0)
好吧,你基本上可以用try catch语句装饰你的lambda表达式,只是为了记录/做错误的事情。
'Find all tickets belonging to a user
Dim _userTicketsList As List(Of Ticket) = Tickets.
FindAll(Function(p)
Dim condition1 As Boolean
Dim condition2 As Boolean
Dim condition3 As Boolean
Try
condition1 = p.ticket_firstname.ToUpper = NewSearchString
Catch ex As Exception
'Do Something
End Try
Try
condition2 = CDate(p.ticket_created_at) >= date1
Catch ex As Exception
'Do Something
End Try
Try
condition3 = CDate(p.ticket_created_at) <= date2
Catch ex As Exception
'Do Something
End Try
Return condition1 And condition2 And condition3
End Function)
根据OP评论编辑的代码添加
If _userTicketsList.Any = False Then
_userTicketsList = Nothing
End If
我还想确保您了解在vb.net中使用And vs. AndAlso子句的区别。
写If(A和B)之类的东西 A和B都将执行。
使用AndAlso时,如果A为假,则不执行B, 因为你正在使用And,我想我会提到它。