2013-06-21 6 views
0
내가 키 타입이 정수 및 값 유형 인 사전을 만들려면

내가 현재에서 실행하고있는 클래스의 유형 다음 내가 해봤알려진 값 유형으로 사전을 만드는 방법은 무엇입니까?

:.

Dim col as new Dictionary(Of Integer, Me.GetType()) 

하지만 `키워드가 유형을 지정하지 않는다는 오류가 나타납니다.

실행중인 클래스의 유형에 따라 사전을 어떻게 만듭니 까?

+0

[MakeGenericType] (http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx)? –

+0

@AlexeiLevenkov 그러면 항목을 사전에 어떻게 추가합니까? 실제로 유형이 아닌 사전을 구성하지 않습니다. – AngryHacker

+0

당신은 (VB.Net에서 그것을 표현하는 방법을 모르겠지만, 나는 C# 샘플을 줄 수있다.) 그러나 좀 더 합리적인 해결책을 제안 할 수 있기를 바랍니다. C#에서는 코드에서 결과 유형을 표현하는 데 문제가 있습니다. (IDictionary 만 옵션 일 수 있습니다) - VB.Net에 대한 확신이 없습니다. –

답변

4

C# 형식으로 생성되는 int의 사전입니다. 사용

방법 :

문제는 다소 입력 안전한 방식으로 형태를 생성 주로 표현한다. Dictionary 경우에는 IDictionary에 의지하거나 객체를 조작하기 위해 리플렉션을 계속 사용할 수 있습니다.

또한 어떻게 든 더 많은 반사에 의해 호출 일반적인 코드로 대부분의 조작을 표현하는 것이 가능하다 MakeGenericMethod

샘플 :

var myType = typeof(Guid); // some type 

    // get type of future dictionary 
    Type generic = typeof(Dictionary<,>); 
    Type[] typeArgs = { typeof(int), myType }; 
    var concrete = generic.MakeGenericType(typeArgs); 

    // get and call constructor 
    var constructor = concrete.GetConstructor(new Type[0]); 
    var dictionary = (IDictionary)constructor.Invoke(new object[0]); 

    // use non-generic version of interface to add items 
    dictionary.Add(5, new Guid()); 
    Console.Write(dictionary[5]); 

    // trying to add item of wrong type will obviously fail 
    // dictionary.Add(6, "test"); 
+0

무엇을할까요? 이 줄이야? 'var constructor = concrete.GetConstructor (new Type [0]);'어떤 타입 [0] ??? – AngryHacker

+0

@AngryHacker'GetConstructor'에는 생성자의 각 인수 유형을 지정하는 (일치하는 항목을 찾기 위해) 배열'Type' 객체가 필요합니다. 'new Type [0]'은 0 요소의 배열입니다. - 0 매개 변수로 생성자를 찾고 있습니다. 다른 생성자가 필요한 경우이를 조정해야 할 수도 있습니다. –

0

단지에 클래스 이름 Dim col as new Dictionary(Of Integer, MyClass)

를 사용 정수형을 키로 사용하지 않는 쪽은 사전에 정수를 인덱스로 사용하기 때문에 혼동을 줄 수 있습니다. 키가 연속 정수가되는 경우 목록에서 더 잘 서비스 할 수 있습니다.

관련 문제