2012-07-30 1 views
1

현재이 문제에 직면하고 있습니다. 모든 유형의 사례를 사용하여 사전 인스턴스를 만들어야합니다. 형식은 메서드의 인수로 전달됩니다. 내 라이브러리를 사용하여 사용자가 많은 변환 문제를 겪고 있기 때문에 단순히 동적 또는 객체 유형 사전을 만들고 싶지 않습니다. 내 메서드는 실제 (파일에 저장된) 데이터로 사전을 채우기 때문에 간단한 생성자를 사용할 수도 없습니다. 유형 변수를 사용하여 특정 사전을 만드는 것이 중요합니다.유형 변수에서 모든 유형의 사전을 만드는 방법은 무엇입니까?

Dictionary<string, int> dict = MyLib.createDict(typeof(string), typeof(int)); 
// or 
MyOwnType myInstance = new MyOwnType(); 
Dictionary<string, MyOwnType> dict = MyLib.createDict(typeof(string), myInstance.GetType()); 
+3

그리고 정확한 문제가 무엇인가를 사용하여 제네릭 형식의 인스턴스를 작성하여 지정된 유형과 제네릭 형식을 만듭니다 받기? 그리고 함수 호출에 일반적인 인수를 사용하지 않는 이유는 무엇입니까? –

답변

4
Type dictType = typeof(Dictionary<, >).MakeGenericType(Type1, Type2); 
var dict = Activator.CreateInstance(dictType); 
  • Dictionary
  • 의 유형 MakeGenericType
  • Activator.CreateInstance
+0

오, 그렇게 간단합니다. 먼저 대상 유형을 사용해 보았지만 var가 마침내 작동하는 것 같습니다. 그러나, 내 사전을 채우기 위해 사전 메서드를 호출 할 수 있도록 동적으로 그것을 깨달았습니다. 고맙습니다. – modiX

4

다음을 당신이 할 수있는 제네릭을 사용하여 :

public static Dictionary<T, U> CreateDict<T,U>() 
{ 
    Dictionary<T,U> dict = new Dictionary<T,U>(); 

    // Fill dictionary with data  

    return dict; 
} 

사용자는 다음이를 호출 할 수 있습니다 사용자가 내 메소드를 호출 여기

public static Dictionary<dynamic, dynamic> createDict(Type type1, Type type2) 
{ 
    // how to create the dictionary? 
    // im filling my dictionary with any data ... 
    return dict; 
} 

: 어떤 메신저 생각의 입니다 기능 :

var myDict1 = CreateDict<string,int>(); 
var myDict2 = CreateDict<string,MyOwnType>(); 
+0

예, 문제는 모든 유형, 심지어 사용자 자체의 인스턴스 유형 일 수 있습니다. 이 경우 사전을 동적으로 만드는 방법이 혼란 스럽습니다. – modiX

+0

사용자가 유형을 제공합니다. 예제에서 사용자는 문자열과 int를 매개 변수로 전달합니다. 이러한 유형이 사용자 정의 유형인지 여부는 중요하지 않습니다. 예를 들어 내 대답을 수정합니다. –

+0

예를 들어 첫 번째 게시물을 업데이트했습니다. 감사합니다. – modiX

관련 문제