0

我正在尝试将我的旧 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 方法看起来很难看,而且我不喜欢每次抛出(并吃掉)错误时让调试窗口告诉我异常。

有没有人有更好的想法?

4

6 回答 6

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
于 2013-02-17T10:54:08.040 回答
1

您可以简单地使用 contains 方法来检查密钥是否存在。

于 2013-02-17T08:35:48.447 回答
1

我不会使用“on errer resume next”的方法。只需使用“包含”方法测试集合。

Dim  Ret as integer
Ret=0
If (uCol.contains(uText)) then
  Ret= CInt(uCol(uText))
Return ret
于 2013-02-17T08:36:57.170 回答
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
于 2013-02-17T13:32:04.140 回答
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
于 2013-02-17T09:08:57.177 回答
0

如果你有 Vb.Net,你可以在 Try 使用示例中处理错误:Try

抓住前任作为例外

结束尝试

我希望我理解正确

于 2013-02-17T08:28:19.863 回答