![](/img/trans.png)
[英]Look for value in property of Object with out knowing the name of the property
[英]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
屬性。
從您的代碼中,我假設localBackup
和classInstance
Type
相同,因此只是在初始化具有相同屬性值的新類實例,而另一個類實例( localBackup
)已經嘗試過
prop.GetSetMethod().Invoke (classInstance, new object[] { prop.GetGetMethod().Invoke(localBackUp, null) } );
不過有一點要注意:
如果我的假設是正確的,那么有恕我直言,更好的選擇可以做您嘗試做的事情(例如,通過序列化和反序列化實例)...
如果您的目標是克隆對象,則在此處介紹最佳方法(我認為): 深度克隆對象 (如@Yahia提到的序列化和反序列化)。 非常重要的是它返回了深拷貝 ,因此原始對象和新對象之間不會共享數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.