我需要检查Visual Basic中List中指定索引处是否存在对象。 我拥有的是
Dim theList As New List(Of Integer)({1,2,3})
If theList.Item(3) = Nothing Then
'some code to execute if there is nothing at position 3 in the list
但是当我运行程序时,我得到System.ArgumentOutOfRangeException,说索引超出范围。当然,要点是要查看它是否存在。如果“ = Nothing”不是检查该索引是否存在某些内容的方法,那是什么?
我在我的应用程序开发班上,如果有任何问题,我们正在使用Visual Studio 2017来开发Windows窗体应用程序。
答案 0 :(得分:3)
如果要检查对象列表,则需要更改两件事。
Is Nothing
。您应该将代码更改为
If theList.Items.Count > 3 AndAlso theList.Item(3) Is Nothing Then
'some code to execute if there is nothing at position 3 in the list
End If
请注意在AndAlso
语句中使用And
而不是If
。这是必需的,因为它可以确保仅在列表中至少有4个项目时才对第3个项目进行检查。
还要注意,在您发布的代码中,该列表为List(Of Integer)
。 Integer
永远不会是Nothing
,因此不需要检查的第二部分,或者应该检查= 0
而不是Is Nothing
。
答案 1 :(得分:1)
每当您有一个列表时,您只能访问列表的成员,访问超出界限的虚构项将导致您指定的错误。整数数据类型与Nothing的比较是对0的比较。IMO这种用法没有什么是不理想的。如果您什么都不想要,可以看看Nullable。这是一些代码。
Dim theList As New List(Of Integer)({0, 1, 2, 3})
For idx As Integer = 0 To theList.Count - 1 'look at each item
If theList.Item(idx) = Nothing Then
Stop ' item is 0
End If
Next
Dim i As Integer = Nothing ' i = 0
'Dim theListN As New List(Of Integer?)({1, 2, 3, Nothing, 5})
Dim theListN As New List(Of Nullable(Of Integer))({1, 2, 3, Nothing, 5, Nothing})
For idx As Integer = 0 To theListN.Count - 1 'look at each item
If theListN.Item(idx) Is Nothing Then
'item is nothing, not 0
Dim nullI As Nullable(Of Integer) = theListN.Item(idx)
If Not nullI.HasValue Then Stop
End If
Next