C# 在未知对象中设置属性

标签 c# class object reflection gettype

我必须在未知对象内设置属性。结构如下所示:

        ObjA.ObjB().ObjC.PropA = propValue;

ObjA 来自引用的类。 ObjB() 是对象类型,因此 ObjC 未知。我考虑过使用 Reflection,但不知道在这种情况下如何正确使用它。

        object objB = ObjA.ObjB();
        Type objBType = objB.GetType();
        System.Reflection.XXXInfo objCInfo = objBType.GetXXX("ObjC");

        Type objCType = objCInfo.GetType();
        System.Reflection.PropertyInfo PropAInfo = objCType.GetProperty("PropA");
        PropAInfo.SetValue(PropAInfo, propValue, null);

答案(感谢 BigM):

        dynamic objAB = ObjA.ObjB(); 
        objAB.ObjC.PropA = propValue;

最佳答案

这可能适合你。

object objB = ObjA.ObjB();
Type objBType = objB.GetType();
System.Reflection.PropertyInfo objCInfo = objBType.GetProperty("ObjC");
object val = objCInfo.GetValue(objB);

Type objCType = val.GetType();
System.Reflection.PropertyInfo PropAInfo = objCType.GetProperty("PropA");
PropAInfo.SetValue(val, propValue, null);

但是,我认为可以在这里进行一些重新架构以使生活变得更轻松。例如,如果您对类型一无所知,那么您可以考虑使用 dynamic 并返回 dynamic来自 ObjCPropA 的类型 - 但那里的性能受到影响。

另一方面,如果有任何方法可以使用泛型,那将使您的生活变得更加轻松。例如,这里设置属性值的代码,如果该方法是通用的,它可能能够定义 ObjC 的类型 - 但我无法用当前的代码片段真正推断出这一点。

关于C# 在未知对象中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178988/

相关文章:

c# - 调用 tojson() 后创建 3 个 List<column>

java - 如何安装或导入用于 Java 的 Bouncy CaSTLe Cryptography API; ZIP 没有 .class 文件;使用 netbeans ide

javascript - ES6 类 Promise 链——访问 'this'

javascript - 如何将对象中的索引更改为值

javascript - 变量突然变成未定义?

c# - Entity Framework - 生成额外 JOIN 的导航属性

c# - 维护内存的可重用列表

jQuery,自定义对象的新实例

c# - 从 C# 删除和创建存储过程

C++类和垃圾数据