检查对象是否存在于Visual Basic中的列表索引处

时间:2018-11-07 15:50:32

标签: vb.net

我需要检查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窗体应用程序。

2 个答案:

答案 0 :(得分:3)

如果要检查对象列表,则需要更改两件事。

  1. 不检查内容的方法是使用Is Nothing
  2. 您甚至无法尝试检查列表末尾以外的项目,因此必须首先检查要使用的索引是否小于列表中的项目数。

您应该将代码更改为

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