2012-07-30 42 views
2

假設您擁有鍵/值對的集合。例如, : -如何基於鍵值對創建對象

dictionary<string,string> myObjectToBeCreated = new dictionary<string,string>(); 
myObjectToBeCreated.Add("int","myIntObject"); 
myObjectToBeCreated.Add("string","myStringObject"); 
myObjectToBeCreated.Add("employee","myEmployeeObject"); 

現在,您如何使用myObjectToBeCreated創建名爲myIntObject的int對象。這樣的事情: -

int myIntObject; 
string myStringObject; 
Employee myEmployeeObject = new Employee(); 

注:你只是收集。這個集合具有dataTypes和objectnames。你如何創建具有特定名稱的數據類型的對象(在字典中定義)。您可以傳遞此集合(MyObjectsToBeCreated以您想要的任何方法)。但最後你應該得到類型的對象(在字典中指定)。

你可以使用任何設計模式說工廠/依賴/建設者。甚至你可以自由地實現上述的W/O使用模式。

+0

你期望什麼結果?對象字典? – 2012-07-30 07:21:35

+0

嗯,沒有問題得到給定類型的實例,但是除非你想生成代碼,否則你真的不能使用這個名字來做任何事情? – 2012-07-30 07:23:14

+0

@SergRogovtsev,nope對象/對象。假設你在返回鍵/值對 – 2012-07-30 07:23:29

回答

3

僅使用自定義類的類名稱是不夠的。你需要整個命名空間。

然後假設你有你的類型參數的構造函數,你可以使用

Activator.CreateInstance(Type.GetType(strNamespace + strType)) 

Activator.CreateInstance(strNamespace, strType) 
+0

雖然你的第一個例子,即 - 「Activator.CreateInstance(Type.GetType(strNamespace + strType))」,似乎接近我的查詢,所以+1相同。但它仍然缺乏variablename(objectname)的聲明。如何將CreateInstance的返回值分配給變量「myIntObject,myStringObject」等。 – 2012-07-30 15:36:48

2

如果您可以使用類型,而不是字符串:

Dictionary<Type, object> yourObjects = new Dictionary<Type, object>(); 
yourObjects[typeof(int)] = 5; 
yourObjects[typeof(string)] = "bamboocha"; 


var integer = (int)yourObjects[typeof(int)]; 
1
var myObjects = new Dictionary<string, Object>(); 

foreach (var pair in myObjectToBeCreated) 
{ 
    var strNamespace = //set namespace of 'pair.Key' 
    myObjects.Add(pair.Value, Activator.CreateInstance(strNamespace, pair.Key)); 
} 

// and using it 
var myEmployeeObject = (Employee)myObjects["myEmployeeObject"]; 
+0

Ria,Employee類不會暴露給客戶端。因爲他們有包含類名稱的字符串集合,但他們沒有暴露給類。如果它在那裏,則不需要使用任何複雜的機制來創建對象,我寧願使用Employee myEmployee = new Employee創建。但是我不能這樣做,因爲Employee類不會暴露給客戶端。注意:示例中使用的所有其他類型只是爲了簡化操作。但在實踐中,我們將獲取類名作爲字符串以及要創建的對象變量的名稱。 – 2012-07-30 15:16:38