amd*_*amd 7 c# reflection reflection.emit dynamic anonymous-types
在 C# 中,我可以在编译时轻松创建这样的匿名对象:
var items = new {
Price = 2000,
Description = "",
Locations = new List<string> { "", "" }
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,可以在运行时创建这个对象吗?我听说过发射/元编程,但我不知道它在这里是否有帮助。
请注意,这些对象将在 for 循环(100 项或更多)内创建,因此我推荐允许类型缓存的技术。
谢谢。
Include类似 in的功能db.Users.Include("Users"),所以我需要Users在运行时按需添加属性。匿名类型是在编译时生成的,只是常规类型。
由于您谈论的是编译过程之外的内容,因此您不再具有“在编译时生成(匿名)类型”选项,除非您自己将类型编译为生成后立即加载的程序集。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;
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |