我正在尝试将旧的VB6代码添加到现代VB.NET代码中。
在我的VB6代码中,我需要查询集合中是否存在密钥。
我这样做:
Private Function pIndexFromKey(ByRef uCol As Collection, ByVal uText As String) As Long
On Error Resume Next
Dim lRet&
lRet = uCol.Item(uText)
pIndexFromKey = lRet
End Function
如果pIndexFromKey返回0,我知道该密钥未包含在集合中,我将其添加如下:
nCollection.Add(lIndex, sText)
我想知道这是否是“好”的做法。我想不是因为在.NET中我使用的是VisualBasic集合,而且它是“VB”而不是系统集合的事实让我怀疑。
仅供记录,这是我的VB.NET代码:
Private Function pIndexFromKey(ByRef uCol As Collection, ByVal uText As String) As Integer
On Error Resume Next
Dim lRet As Integer = CInt(uCol(uText))
Return lRet
End Function
代码工作正常,但我的On Error Resume Next方法看起来很难看,我不喜欢每次抛出(并吃掉)错误时都会让调试窗口告诉我异常。
有没有人有更好的想法?
答案 0 :(得分:1)
您只需使用contains方法检查密钥是否存在。
答案 1 :(得分:1)
我不会使用“on next resume next”方法。 只需使用“包含”方法测试集合。
Dim Ret as integer
Ret=0
If (uCol.contains(uText)) then
Ret= CInt(uCol(uText))
Return ret
答案 2 :(得分:1)
删除VB集合并使用高级通用列表。
在你的情况下,我怀疑你使用的是一个简单的List(Of String) 如果是这样,请使用此替换方法
Dim k as List(Of String) = new List(Of String)
k.Add("Test1")
k.Add("Test2")
k.Add("Test3")
k.Add("Test4")
k.Add("Test5")
' No need to use Contains, IndexOf doesn't throw exceptions if the element is not there
Dim x = k.IndexOf("Test4")
if x = -1 then
Console.WriteLine("Test4 is not in list")
else
Console.WriteLine("Test4 is at index" + x.ToString)
End if
答案 3 :(得分:1)
您可以使用Generic.Dictionary(Of String,Integer)。所以不要这样:
Private Function pIndexFromKey(ByRef uCol As Collection, ByVal uText As String) As Integer
On Error Resume Next
Dim lRet As Integer = CInt(uCol(uText))
Return lRet
End Function
你会有这个:
Private Function pIndexFromKey(dict As Dictionary(Of String, Integer), uText As String) As Integer
Dim lRet As Integer
If dict.TryGetValue(uText, lRet) Then Return lRet
Return -1 'default value if key was not found in the dictionary
End Function
答案 4 :(得分:0)
如果你有Vb.Net,你可以在Try use中处理错误 例: 尝试
抓住ex Exception
结束尝试
我希望我理解正确
答案 5 :(得分:0)
我将VisualBasic.Collection
替换为ObjectModel.Collection(Of T)
作为初学者。然后,摆脱自定义函数,只需检查Contains()
方法。
Dim nCollection As New ObjectModel.Collection(Of String)
Dim sText As String = "value"
If Not nCollection.Contains(sText) Then
nCollection.Add(uText)
End If
If nCollection.Contains(sText) Then
Dim index = nCollection.IndexOf(sText)
End If