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)' 的类型参数太少”

任何帮助肯定会有所帮助(事实上,包括匿名方法的示例的完整翻译也会有所帮助:D。

4

3 回答 3

1

我通过我通常用来将 C# 转换为 VB.NET 的工具运行了您提到的示例,网址为 www.developerfusion.co.uk/tools

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

1-正如 kevinw 指出的那样,您的原始代码是错误的,应该是:

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

2- 上面的代码应该在继承自KeyValuePair的 a中插入一个新的。如果它不起作用,则很有可能您的 Inherits 行是错误的。根据错误,该方法需要一个键,而不是 a ...也许您继承自 a而不是 a ?PairCollectionList(Of KeyValuePair)AddKeyValuePairDictionaryList

于 2009-10-26T13:25:22.097 回答
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 中的反编译发现)我没有(尽管“this”在 C# 中有效)。我想我把这归结为 VB.NET 中的一个怪癖?

感谢 Kevinw 和 Meta-Knight。原始代码是错误的,但我一直是从 List 继承的。

于 2009-10-27T00:19:15.940 回答