【发布时间】:2010-11-02 16:29:24
【问题描述】:
有没有可能动态声明一个类? 是否有可能在 C# 中使用匿名类创建通用列表? 任何代码 sn-ps 都会有所帮助。谢谢
【问题讨论】:
-
有可能,但它可能不是您想要的。你想做什么?
-
对不起,我不够清楚。我不知道我的班级会有哪些属性。我动态获取所需的属性列表。
标签: c# .net reflection anonymous-class
有没有可能动态声明一个类? 是否有可能在 C# 中使用匿名类创建通用列表? 任何代码 sn-ps 都会有所帮助。谢谢
【问题讨论】:
标签: c# .net reflection anonymous-class
动态声明一个类需要CodeDom。
是否有可能在 C# 中使用匿名类创建通用列表?
是的,但一般来说,不建议在直接上下文之外使用它。例如,这会创建一个匿名类型的通用列表:
var range = Enumerable.Range(0, 100);
var genericList = range.Select(value => new { Value = value }).ToList();
在上面的代码中,genericList 是一个包含匿名类型的List<T>。
【讨论】:
CodeDom 很棒,但语言功能与CodeDom 支持的功能(例如readonly 字段)之间往往存在功能脱节。 System.Reflection.Emit 是实现完全控制的方法,尽管路线更复杂。
正如 SLaks 在 cmets 中提到的,这是可能的。但这不是微不足道的。我不确定您要做什么,但您可以轻松地将匿名 types 添加到通用对象列表中。
List<object> list = new List<object>();
for(int i = 0; i < 10; i++){
list.Add(new { SomeProperty = i, OtherProperty = "foobar" });
}
【讨论】:
Microsoft 在 4.0 版中使 C# 动态化。您可以使用新的“动态”关键字。下面的链接有一些很好的例子来说明如何使用新的动态类型。
【讨论】: