2011-11-13 73 views
1

我有一個名爲BackUp的類,其中包含一些屬性。 比方說,我有一個BackUp的現有實例,其屬性已初始化。在不知道屬性名稱和值的情況下設置反射屬性對象

當我在BackUp類中使用反射時,我想要創建一個AgentActivator對象,我需要設置其屬性,其想法是從BackUp對象中檢索屬性。

問題是從BackUp對象中取出PropertyInfo對象,並在反射對象上設置匹配屬性。

我做了以下內容:

Assembly assembly = Assembly.LoadFile(localBackUp.AssemblyFileName); 
Type currentClasstype = assembly.GetType(localBackUp.ClassName);    
PropertyInfo[] properties = currentClasstype.GetProperties(); 
object classInstance = Activator.CreateInstance(localBackUp.AssemblyFileName, 
    localBackUp.ClassName); 
string propName= null;     
foreach(PropertyInfo prop in properties) 
{ 
    propName= prop.Name; 
    currentClasstype.GetProperty(propName). 
     SetValue(classInstance, findProperty(localBackUp, propNmae), null); 

} 

我需要找到一種方法來實現findProperty方法。 它的工作是獲取字符串(屬性名稱)並從localBackUp返回匹配值,該值與propName一起保存屬性。

+0

你最好先修復所有這些錯別字......然後你可以希望有人剔除你的代碼。 –

+0

另外,當你已經知道如何調用'SetValue'時,你一定會知道如何調用'GetValue'。 –

+0

我試圖修正語法而不改變句子的含義。不知道我是否成功了,如果事實並非如此,請提前道歉。 – Otiel

回答

1

從你的代碼我假設的localBackupTypeclassInstance是相同的,因此只是初始化具有相同的屬性值另一個類的實例(localBackup)已經有了一個新的類實例嘗試

prop.GetSetMethod().Invoke (classInstance, new object[] { prop.GetGetMethod().Invoke(localBackUp, null) }); 

一個此言雖然:

如果我的假設是真的,那麼還有恕我直言有更好的選擇,做你的(通過序列化和反序列化的實例例如)試圖什麼...

0

如果你的目標是克隆對象,最好的(我認爲)方法在這裏描述:Deep cloning objects(@Yahia提到了序列化和反序列化)。非常重要的是,它返回深拷貝,所以原來的和新的對象不需要共享之間的數據本身。

相關問題