在C#中,我可以在编译时轻松地创建一个像这样的匿名对象:
var items = new {
Price = 2000,
Description = "",
Locations = new List<string> { "", "" }
};
我的问题是,是否可以在运行时创建该对象? 我听说过 emit / meta编程,但我不知道这是否对您有帮助。
请注意,这些对象将在for循环(最多100个项目)内创建,因此我建议使用允许类型缓存的技术。
谢谢。
Include
中那样实现db.Users.Include("Users")
功能,因此我需要在运行时按需添加Users
属性。答案 0 :(得分:0)
匿名类型是在编译时生成的,只是常规类型。
由于您的讨论超出了编译过程,因此不再具有“在编译时生成(匿名)类型”选项,除非您将类型自己编译为在生成后立即加载的程序集。 System.Reflection.Emit是您的朋友在这里。不过,这相当昂贵。
就我个人而言,我会跳过所有麻烦的事,而去研究一种自然而然的动态类型,例如ExpandoObject
。您可以添加属性,就像将条目添加到字典一样:
dynamic eo = new System.Dynamic.ExpandoObject();
IDictionary<string, object> d = (IDictionary<string, object>)eo;
d["a"] = "b";
string a = eo.a;
结果: