gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:02:52 25 4
gpt4 key购买 nike

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

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

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

        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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com