【问题标题】:When .NET assemblies are compiled, what are the classes that have x__ in their names?编译 .NET 程序集时,名称中包含 x__ 的类是什么?
【发布时间】:2010-08-18 14:19:26
【问题描述】:

例如:

  • StudentRegistrationService<>c__DisplayClass1
  • <>f__AnonymousType56`2
  • DocShareClassification<GetErrors>d__2

我相当确定StudentRegistrationService<>c__DisplayClass1 是一个闭包,并且<>f__AnonymousType56`2 是在指定匿名类型时生成的,但我之前从未见过d__ 类。除了这些还有其他吗?

【问题讨论】:

  • 这有什么关系?我的意思是,列出可能在任何未来版本或服务包中更改的内部未记录内容并不会带来太多价值,因为我们无论如何都不应该依赖它们。
  • 好奇心。我在 PartCover 测试覆盖率结果中看到了它们,想知道哪些(如果有)足够重要,可以包含在覆盖率报告中。
  • @Jeremy,我会排除任何带有 CompilerGenerated 属性标记的方法。
  • 这是stackoverflow.com/questions/2508828 的副本 - 有关详细信息,请参阅我的回答。
  • 谢谢 Eric,你的回答正是我想要的,但不知道要搜索什么

标签: c# .net


【解决方案1】:

这些是由 C# 编译器生成的类,以便至少支持以下功能

  • 闭包/匿名方法表达式
  • 匿名类型
  • 迭代器

d__2 可能是一个迭代器帮助类。

【讨论】:

    【解决方案2】:

    这是在编译时使用匿名类型创建的生成类

    【讨论】:

      【解决方案3】:

      IIRC 它是为迭代器块生成的类。但是,您应该对这些名称做出任何假设或依赖它们 - 这是实现细节,可能随时更改

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2012-03-16
        • 1970-01-01
        • 2020-03-24
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多