【问题标题】:How to declare a class dynamically? C#如何动态声明一个类? C#
【发布时间】:2010-11-02 16:29:24
【问题描述】:

有没有可能动态声明一个类? 是否有可能在 C# 中使用匿名类创建通用列表? 任何代码 sn-ps 都会有所帮助。谢谢

【问题讨论】:

  • 有可能,但它可能不是您想要的。你想做什么?
  • 对不起,我不够清楚。我不知道我的班级会有哪些属性。我动态获取所需的属性列表。

标签: c# .net reflection anonymous-class


【解决方案1】:

动态声明一个类需要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 是实现完全控制的方法,尽管路线更复杂。
  • @Steve:没错——但是一旦人们了解了 CodeDom,他们通常可以在需要时找到 Emit...
【解决方案2】:

正如 SLaks 在 cmets 中提到的,这是可能的。但这不是微不足道的。我不确定您要做什么,但您可以轻松地将匿名 types 添加到通用对象列表中。

List<object> list = new List<object>();
for(int i = 0; i < 10; i++){
   list.Add(new { SomeProperty = i, OtherProperty = "foobar" });
}

【讨论】:

    【解决方案3】:

    Microsoft 在 4.0 版中使 C# 动态化。您可以使用新的“动态”关键字。下面的链接有一些很好的例子来说明如何使用新的动态类型。

    http://msdn.microsoft.com/en-us/library/dd264741.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      相关资源
      最近更新 更多