gpt4 book ai didi

c# - 是否可以将属性添加到动态对象运行时的属性中?

转载 作者:太空狗 更新时间:2023-10-29 18:00:09 28 4
gpt4 key购买 nike

我想为动态对象/expando 对象运行时的属性添加一个属性,这可能吗?

我想做的是:

dynamic myExpando = new ExpandoObject();
myExpando.SomeProp = "string";
myExpando.AddAttribute("SomeProp", new MyAttribute());

是否有可能以一种或另一种方式做到这一点?

最佳答案

您可以像这样向动态对象添加属性:

 dynamic myExpando = new ExpandoObject();
myExpando.SomeProp = "string";
TypeDescriptor.AddAttributes(myExpando, new SerializableAttribute());

要读取你应该使用的属性:

 dynamic values = TypeDescriptor.GetAttributes(myExpando);
for (int i = 0; i < values.Count; i++)
{
System.Console.WriteLine(values[i]);
}

我不确定您是否可以像这样阅读自定义属性。但是你也可以尝试反射:

 System.Reflection.MemberInfo info = myExpando.GetType();
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i++)
{
System.Console.WriteLine(attributes[i]);
}

但是,使用反射你看不到你添加的属性,因为属性是静态元数据。

TypeDescriptor 是 .NET FCL 提供的元数据引擎。您可以在这里阅读这篇文章:

http://blogs.msdn.com/b/parthopdas/archive/2006/01/03/509103.aspx

关于c# - 是否可以将属性添加到动态对象运行时的属性中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530134/

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