gpt4 book ai didi

C# 动态构建匿名对象

转载 作者:行者123 更新时间:2023-11-30 12:54:52 27 4
gpt4 key购买 nike

在 C# 中,我可以在编译时轻松创建这样的匿名对象:

var items = new {
Price = 2000,
Description = "",
Locations = new List<string> { "", "" }
};

我的问题是,可以在运行时创建这个对象吗?我听说过 emit/meta programming,但我不知道它在这里是否有帮助。

注意到这些对象将在 for 循环(100 项或更多)内创建,因此我推荐允许类型缓存的技术。

谢谢。

更新 - 为什么我需要这个

  • 一个示例可能是实现 Include 功能,如 db.Users.Include("Users"),因此我需要添加 Users 属性在运行时按需。

最佳答案

匿名类型是在编译时生成的,只是常规类型。

由于您讨论的是编译过程之外的内容,因此您不再有“在编译时生成(匿名)类型”选项,除非您自己将类型编译为在生成后立即加载的程序集。 System.Reflection.Emit是你的 friend 。但这相当昂贵。

就我个人而言,我会跳过所有这些麻烦,并研究一种本质上是动态的类型,例如 ExpandoObject。您可以添加属性,就像向字典中添加条目一样:

dynamic eo = new System.Dynamic.ExpandoObject();
IDictionary<string, object> d = (IDictionary<string, object>)eo;
d["a"] = "b";

string a = eo.a;

结果:

enter image description here

关于C# 动态构建匿名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53264203/

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