【问题标题】:Set Reflection Property object without knowing the property name & value在不知道属性名称和值的情况下设置反射属性对象
【发布时间】:2011-11-13 10:43:00
【问题描述】:

我有一个名为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 的属性。

【问题讨论】:

  • 你最好先把那些错别字改正……然后你可以指望有人破译你的代码。
  • 另外,当您已经知道如何调用SetValue 时,您肯定会知道如何调用GetValue
  • 我试图在不改变句子含义的情况下修正语法。不知道我是否成功,所以如果不是这样,请提前道歉。
  • 既然你已经展示了 GetProperty 的使用,我不清楚问题出在哪里 - 你能澄清一下我们是不是被卡住了?
  • localBackup如何存储房产信息?在字典里?

标签: c# reflection


【解决方案1】:

根据您的代码,我假设 localBackupclassInstance 中的 Type 是相同的,因此只是用另一个类实例 (localBackup) 已经尝试过的具有相同属性值的新类实例进行初始化

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

不过有一句话:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 2021-01-27
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      相关资源
      最近更新 更多