2012-12-14 3 views
0

안녕 난 결과는 다음과 같습니다다중 값 사전 상속 사전 만들기 위해 노력 - 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); 
    } 
} 

을 VB이 C# 코드를 변환하려고에 C 번호를 :

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 (TValue 중)'는 을 'TValue'로 변환 할 수 없습니다.

저는 TKey TValue 표기법에 대해 분명히 알지 못합니다. 누군가이 오류에 대해 설명해 줄 수 있습니까? 대신 무엇을 읽어야합니까? 사전에

감사

+0

['Lookup'] (http://msdn.microsoft.com/en-us/library/bb460184.aspx)는 충분하지 않습니까? – AgentFire

+0

VB.Net에서 함수 오버로드를 언급 할 때 약간의 차이가 있다고 생각합니다. –

답변

1

먼저 허용하지 않습니다 사용

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

코드 변환 유틸리티, 더 나은 인터페이스를 상속받습니다. list 자체가 아닙니다.

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

둘째, 당신의 Add mthod 통화 자체를 호출하는 것 같다. base '메소드를 호출 해보십시오.

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

셋째, Lookup<,>을 사용하면 어떨까요? 키로 요소를 그룹화하는 것이 매우 간단합니다.

+0

고마워, 나는 확실히 Lookup을 줄 것이다. – TripleAntigen

1

명시 적으로 대신 기본 클래스에 메서드를 호출하십시오 : 당신이 VB의 suckiness :

+0

고쳐 주셔서 감사합니다! – TripleAntigen