2012-07-30 91 views
1

目前我正在面臨的問題,我需要創建任何類型的案件的字典的一個實例。類型由方法的參數傳遞。 我不是簡單地想創建一個動態或對象類型的詞典,因爲這使用我的庫面臨用戶很多轉換問題。 我也不能使用一個簡單的構造函數,因爲我的方法用真正的數據(存儲在文件中)填充字典。通過Type變量創建特定字典非常重要。 這是什麼即時通訊思想:如何在類型變量中創建任何類型的字典?

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

在這裏,用戶調用我的方法:

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

什麼是您的具體問題,一般類型的實例指定的類型?爲什麼你不使用泛型參數來進行函數調用? – 2012-07-30 07:45:02

回答

4
Type dictType = typeof(Dictionary<, >).MakeGenericType(Type1, Type2); 
var dict = Activator.CreateInstance(dictType); 
  • 獲取鍵入Dictionary
  • 創建一個泛型類型使用MakeGenericType
  • 創建使用Activator.CreateInstance
+0

哦這麼簡單,我先試着用目標類型,但var最終似乎是工作。然而,我意識到它與動態能夠調用我的字典方法來填充我的字典。謝謝。 – modiX 2012-07-30 08:40:49

4

使用泛型,你可以做到以下幾點:

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

    // Fill dictionary with data  

    return dict; 
} 

然後,用戶可以調用這個功能:

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

是的,問題只是,它可以是任何類型,甚至用戶自己的類型的實例。我很困惑如何在這種情況下動態地創建字典。 – modiX 2012-07-30 08:06:52

+0

用戶將提供這些類型。在你給的例子中,用戶傳遞一個字符串和int作爲參數。如果這些是自定義類型,則無關緊要。我將用一個例子編輯我的答案 – 2012-07-30 08:08:00

+0

我用一個例子更新了我的第一篇文章,謝謝。 – modiX 2012-07-30 08:10:30