0

您好我正在尝试将此 C# 代码转换为 VB

class MultiValueDictionary<TKey, TValue> : Dictionary<TKey, List<TValue>>
{

   public void Add(TKey key, TValue value)
   {
      if(!ContainsKey(key))
         Add(key, new List<TValue>());
      this[key].Add(value);
   }
}

结果如下所示:

Class MultiValueDictionary(Of TKey, TValue)
    Inherits Dictionary(Of TKey, List(Of TValue))

    Public Sub Add(key As TKey, value As TValue)
        If Not ContainsKey(key) Then
            Add(key, New List(Of TValue)())
        End If
        Me(key).Add(value)
    End Sub
End Class

但它在线上给出了一个错误:

Add(key, New List(Of TValue)())

“System.Collections.Generic.List(Of TValue)”类型的值无法转换为“TValue”。

我对 TKey TValue 表示法不是很清楚,有人可以解释这个错误告诉我什么吗?它应该读什么?

提前致谢

4

2 回答 2

1

尝试显式调用基类上的方法:

MyBase.Add(key, New List(Of TValue)())

您使用的代码转换实用程序不允许 VB 的笨拙:)

于 2012-12-14T05:30:45.243 回答
1

首先,更好地继承接口而不是list自身。

... : Dictionary<TKey, IList<TValue>>

其次,您的Add方法调用似乎在调用它自己。尝试调用 base' 方法。

MyBase.Add(key, New List(Of TValue)())

第三,你为什么不直接使用Lookup<,>?通过键对元素进行分组非常简单。

于 2012-12-14T05:32:58.520 回答