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

containsメソッドを使用するだけで、キーが存在するかどうかを確認できます。

于 2013-02-17T08:35:48.447 に答える
1

私は「次のエラー履歴書」アプローチを使用しません。「contains」メソッドを使用してコレクションをテストするだけです。

Dim  Ret as integer
Ret=0
If (uCol.contains(uText)) then
  Ret= CInt(uCol(uText))
Return ret
于 2013-02-17T08:36:57.170 に答える
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

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

使用例の試行でエラーを処理できるVb.Netがある場合:試行

exを例外としてキャッチ

終了試行

正しく理解できれば幸いです

于 2013-02-17T08:28:19.863 に答える
0

VisualBasic.CollectionObjectModel.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 に答える