2012-12-14 55 views
0

嗨,我想轉換此C#代碼到VB試圖讓從字典繼承的多值的字典 - 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)()) 

典型值的數值e'System.Collections.Generic.List(Of TValue)'不能被 轉換爲'TValue'。

我不是很清楚TKey TValue符號,有人可以解釋這個錯誤告訴我什麼嗎?它應該讀什麼呢?

在此先感謝

+0

不足['Lookup'](http://msdn.microsoft.com/zh-cn/library/bb460184.aspx)足夠嗎? – AgentFire

+0

我認爲應該有一些區別是指VB.Net中的函數重載 –

回答

1

第一個代碼轉換工具,更好的繼承接口而不是list本身。

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

其次,您的Add方法調用似乎自稱。嘗試調用基地的方法。

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

三,您爲什麼不使用Lookup<,>?它非常簡單,可以按鍵對元素進行分組。

+0

謝謝,我一定會給Lookup一個去。 – TripleAntigen

1

嘗試顯式調用基類的方法,而不是:

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

在您使用不允許VB的suckiness :)

+0

謝謝修復! – TripleAntigen