在VB .NET 1.1中搜索集合类型中的项目

时间:2011-11-10 17:07:32

标签: vb.net .net-1.1

我正在使用VB .NET 1.1,并希望确保在键值对类“Dates”(集合类型)中是否存在名称为“TerminationDate”的键。

If Not Dates.Item("TerminationDate") Is Nothing Then
  'Do x y z'
End if

但这是一个例外: 参数索引不是有效值。

我是VB的新手。

由于

2 个答案:

答案 0 :(得分:0)

Item使用索引值返回项目。它在集合中的位置从0开始。如果你想使用密钥找到它:“TerminationDate”你将使用Contains代替。像:

If Dates.Contains("TerminationDate") Then
'Do stuff
End If

根据评论编辑:

我道歉,我想是因为你提到了你使用特定集合类型的键/值。一本字典。如果你有一个KeyValuePairs的集合,你将必须循环每个项目,以查看你想要的项目是否存在。像:

 Dim Item as keyValuePair = nothing
    For i as integer = 0 to Dates.Count -1
       if Dates.Item(i).Key = "TerminationDate" Then
         Item = Dates.Item(i)
       End if
    Next
If Not Item Is Nothing Then
'Do stuff
End If

对于keyValuePair,我的1.1类型名称可能已关闭,我认为Count直接关闭Collection,但它可能是一个关闭Items的方法(如果Items是属性)。我没有安装1.1框架来检查。

包含即使在1.1中也是字典的成员,并且允许您在没有循环的情况下按键查找项目。这里有关于该类型的更多信息,如果您感兴趣的话:

http://msdn.microsoft.com/en-us/library/system.collections.dictionarybase(v=VS.71).aspx

答案 1 :(得分:0)

如您所见,2.0框架中添加了Contains方法,因此您无法使用它。据我所知,1.1框架内无法寻找给定密钥的存在。实现此目的的唯一方法是尝试获取该密钥的项目,并在未找到该异常时吞下该异常。这个辅助方法将做到这一点:

Private Shared Function CollectionHasKey(col As Microsoft.VisualBasic.Collection, key As String) As Boolean
    Try
        Dim O = col.Item(key)
        Return True
    Catch ex As Exception
        Return False
    End Try
End Function

使用它:

    Dim MyCol As New Microsoft.VisualBasic.Collection()
    MyCol.Add(New Date(), "D")

    Trace.WriteLine(CollectionHasKey(MyCol, "D"))
    Trace.WriteLine(CollectionHasKey(MyCol, "Q"))