簡體   English   中英

在不知道屬性名稱和值的情況下設置反射屬性對象

[英]Set Reflection Property object without knowing the property name & value

我有一個名為BackUp的類,其中包含一些屬性。 假設我有一個BackUp的現有實例,其屬性已初始化。

當我在要創建AgentActivator對象的BackUp類中使用反射並且需要設置其屬性時,其想法是從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屬性。

從您的代碼中,我假設localBackupclassInstance Type相同,因此只是在初始化具有相同屬性值的新類實例,而另一個類實例( localBackup )已經嘗試過

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

不過有一點要注意:

如果我的假設是正確的,那么有恕我直言,更好的選擇可以做您嘗試做的事情(例如,通過序列化和反序列化實例)...

如果您的目標是克隆對象,則在此處介紹最佳方法(我認為): 深度克隆對象 (如@Yahia提到的序列化和反序列化)。 非常重要的是它返回了深拷貝 ,因此原始對象和新對象之間不會共享數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM