2013-09-16 26 views
0
string attribute = doc.SelectSingleNode("/class/@name").Value.ToString(); 
ObjectHandle employee = Activator.CreateInstance("EmployeeData", attribute); 
Object employeeObject = employee.Unwrap(); 
return employeeObject; 

'EmployeeData'是當前正在執行的程序集。屬性從XML文件的入口節點中選擇。我需要以更安全的方式創建並返回一個對象,而無需使用ObjectHandle和UnWrap()。誰能幫忙?需要創建對象的類型安全方法

+0

這種方法有什麼問題?什麼阻止你使用任何其他的Activator.CreateInstance重載?無論如何,您將不得不將該類型的全限定名翻譯爲實際類型,那麼問題是什麼? –

+1

如果你有一個類型名稱爲字符串的字符串,你需要什麼類型的安全性? – Dennis

+0

@HansKesting:「EmployeeData」是程序集的名稱,而不是類型。 – Jon

回答

1

這聽起來像這將做的工作:

var type = Assembly.GetExecutingAssembly().GetType(attribute); 
return Activator.CreateInstance(type); 

使用CreateInstance(Type)超載保證定義類型的程序集已經被加載,從而使超載自由返回直object

+0

謝謝!有效。 –

+0

另外我怎樣才能不使用'selectSingleNode'的屬性字符串? –

+0

@AnilKumar:'SelectSingleNode'有什麼問題? – Jon