设置反射属性对象,而无需知道属性名称和值



我有一个名为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方法的方法。它的工作是获取字符串(属性名称(并从保存属性propNamelocalBackUp返回匹配值。

从您的代码中,我假设localBackupclassInstanceType是相同的,因此只是使用相同的属性值初始化一个新的类实例另一个类实例(localBackup(已经尝试了

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

不过有一点是:

如果我的假设是正确的,那么恕我直言,有更好的选择来做你正在尝试的事情(例如,通过序列化和反序列化实例(......

如果您的目标是克隆对象,那么这里描述了最好的(我认为(方法:深度克隆对象(如@Yahia提到的序列化和反序列化(。相当重要的是它返回深拷贝,因此原始对象和新对象不会在自身之间共享数据。

相关内容

  • 没有找到相关文章

最新更新