1

私は現在 VB.NET プロジェクトに参加しており、逆引きを容易にするために KeyValuePair を使用したいと考えています。

ここで C# の優れた例を見つけました: http://www.dreamincode.net/forums/showtopic78080.htm、ただし、VB.NET への変換に小さな問題があります (手動とトランスレータ (オンライン carlosag) の使用の両方)。 )。たとえば、Add メソッドで期待される構文は次のとおりです。

    Public Sub Add(ByVal key As TKey, ByVal value As TValue)
        Me.Add(New KeyValuePair(Of Tkey(key, value))
    End Sub

これは、「「System.Collections.Generic.KeyValuePair(Of TKey, TValue)」への型引数が少なすぎる」ことを示しています

どんな支援も確かに役に立ちます (実際、anon メソッドを含む例の完全な翻訳と同様に:D.

4

3 に答える 3

1

www.developerfusion.co.uk/tools で C# を VB.NET に変換するために通常使用するツールを使用して、あなたが参照した例を実行しました。

Imports System 
Imports System.Collections.Generic 
Imports System.Text 
Namespace ConsoleApplication1 
    Class PairCollection(Of TKey, TValue) 
        Inherits List(Of KeyValuePair(Of TKey, TValue)) 
        Public Sub Add(ByVal key As TKey, ByVal value As TValue) 
            Me.Add(New KeyValuePair(Of TKey, TValue)(key, value)) 
        End Sub 
        Public Function FindByKey(ByVal key As TKey) As List(Of KeyValuePair(Of TKey, TValue)) 
            Return Me.FindAll(Function(ByVal item As KeyValuePair(Of TKey, TValue)) (item.Key.Equals(key))) 
        End Function 
        Public Function FindByValue(ByVal value As TValue) As List(Of KeyValuePair(Of TKey, TValue)) 
            Return Me.FindAll(Function(ByVal item As KeyValuePair(Of TKey, TValue)) (item.Value.Equals(value))) 
        End Function 
    End Class 
    Class Program 
        Private Shared Sub Main(ByVal args As String()) 
            Dim menu As New PairCollection(Of String, Double)() 
            menu.Add("Burger", 3.5R) 
            menu.Add("Hot Dog", 2.25) 
            menu.Add("Fries", 1.75) 
            Console.WriteLine(menu.FindByKey("Fries")(0)) 
            Console.ReadLine() 
        End Sub 
    End Class 
End Namespace 

ご覧のとおり、Add() メソッドは、作成したメソッドとはわずかに異なります。

于 2009-10-26T09:46:33.243 に答える
0

Add メソッドを次のようにオーバーロードすることで解決しました。

Public Overloads Sub Add(ByVal key As TKey, ByVal value As TValue)
   Me.Add(New KeyValuePair(Of TKey, TValue)(key, value))
End Sub

MyBase.Add は動作しますが (Reflector の逆コンパイルで見つかりました)、私は動作しませんでした (「これ」が C# で動作しているにもかかわらず)。私はこれをVB.NETの癖に落とし込んだと思いますか?

Kevinw と Meta-Knight に感謝します。元のコードは間違っていましたが、ずっと List から継承していました。

于 2009-10-27T00:19:15.940 に答える
0

1-kevinwが指摘したように、元のコードは間違っています。次のようにする必要があります。

Me.Add(New KeyValuePair(Of TKey, TValue)(key, value))

2- 上記のコードは、から継承するKeyValuePairaに new を挿入する必要があります。うまくいかない場合は、継承行が間違っている可能性があります。エラーによると、メソッドは a ではなくキーを期待しています...おそらく aではなく aから継承されましたか?PairCollectionList(Of KeyValuePair)AddKeyValuePairDictionaryList

于 2009-10-26T13:25:22.097 に答える