gpt4 book ai didi

c# - 如何使 .NET 反射与动态生成的对象一起工作?

转载 作者:太空狗 更新时间:2023-10-29 20:58:37 28 4
gpt4 key购买 nike

<分区>

看下面的例子:

void Main()
{
// APPROACH 1: With an anonymous type
var myObject = new {
Property1 = "PropertyValue1"
};

// WORKS: Properties contains "Property1"
var properties = myObject.GetType().GetProperties();

// APPROACH 2: With an expando object
dynamic myObject2 = new ExpandoObject();
myObject2.Property1 = "PropertyValue1";

// DOES NOT WORK: Properties2 is null or empty
var properties2 = myObject2.GetType().GetProperties();
}

我想要的是使 Type.GetProperties() 能够处理动态生成的类型。我真的理解为什么它适用于方法 1 而不是方法 2。实际上,在方法 1 中,编译器有机会生成一个看起来与命名类型完全一样的匿名类型。然而,在方法 2 中,编译时类型实际上是一个 ExpandoObject,因此反射无法正常工作。

如何创建一个运行时对象,它是动态的并且也可以正常使用反射,例如 GetProperties 方法?

编辑

感谢所有的回答,但我真的理解并且我知道如何从 ExpandoObject 获取键和值。问题是我需要将动态创建的实例传递给一个方法,在我的控制之外,反过来,在实例上调用 GetProperties()。

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