我有一个名为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
方法的方法。它的工作是获取字符串(属性名称(并从保存属性propName
的localBackUp
返回匹配值。
从您的代码中,我假设localBackup
和classInstance
的Type
是相同的,因此只是使用相同的属性值初始化一个新的类实例另一个类实例(localBackup
(已经尝试了
prop.GetSetMethod().Invoke (classInstance, new object[] { prop.GetGetMethod().Invoke(localBackUp, null) } );
不过有一点是:
如果我的假设是正确的,那么恕我直言,有更好的选择来做你正在尝试的事情(例如,通过序列化和反序列化实例(......
如果您的目标是克隆对象,那么这里描述了最好的(我认为(方法:深度克隆对象(如@Yahia提到的序列化和反序列化(。相当重要的是它返回深拷贝,因此原始对象和新对象不会在自身之间共享数据。