我正在使用VB .NET 1.1,并希望确保在键值对类“Dates”(集合类型)中是否存在名称为“TerminationDate”的键。
If Not Dates.Item("TerminationDate") Is Nothing Then
'Do x y z'
End if
但这是一个例外: 参数索引不是有效值。
我是VB的新手。
由于
答案 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"))