使用 List.FindAll 的对象引用错误
Object Reference Error Using List.FindAll
我有一个奇怪的问题正在努力解决:
我有一个表单可以使用 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
returns 0 个结果或者 returns 任意数量的结果,就会发生这种情况。
我是否可以确定要设置的对象是什么?我假设它 _userTicketsList
但它为什么有时有效有时无效是没有意义的。
我知道在没有看到每一段代码的情况下可能很难发表评论,但是无论如何我可以尝试以不同的方式调试它吗?调试器位于 23,000 多个 Ticket
项目的这行代码上,所以我什至无法确定是否存在导致问题的特定 Ticket
。
非常感谢任何帮助或指导。
谢谢
好吧,您基本上可以用 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 与 AndAlso 子句的区别。
当写类似 If(A and B) 的东西时
A 和 B 都会执行。
使用AndAlso时,如果A为假,则不会执行B,
既然你用的是And,我想我会提一下。
我有一个奇怪的问题正在努力解决:
我有一个表单可以使用 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
returns 0 个结果或者 returns 任意数量的结果,就会发生这种情况。
我是否可以确定要设置的对象是什么?我假设它 _userTicketsList
但它为什么有时有效有时无效是没有意义的。
我知道在没有看到每一段代码的情况下可能很难发表评论,但是无论如何我可以尝试以不同的方式调试它吗?调试器位于 23,000 多个 Ticket
项目的这行代码上,所以我什至无法确定是否存在导致问题的特定 Ticket
。
非常感谢任何帮助或指导。 谢谢
好吧,您基本上可以用 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 与 AndAlso 子句的区别。
当写类似 If(A and B) 的东西时 A 和 B 都会执行。
使用AndAlso时,如果A为假,则不会执行B, 既然你用的是And,我想我会提一下。