始终编译器是否在匿名类型的名称中包含文本“匿名类型”

本文关键字:类型 文本 包含 匿名类型 编译器 是否 | 更新日期: 2023-09-27 18:35:18

编译器似乎总是命名匿名类型,以便它们包含"AnonymousType"。

new { Name = "Sean"}.GetType().Name // Gives: <>f__AnonymousType0`1

这能靠吗?

始终编译器是否在匿名类型的名称中包含文本“匿名类型”

不,你不能依赖它。C# 规范未指定编译器生成类型的名称。因此,编译器的未来版本(或替代实现,如单声道)可能会选择不同的命名方案。

今天的 C# 编译器确实会将名称 AnonymousType 作为 IL 中生成名称的一部分。

不过,这严格来说是一个实现细节。 它不是由语言指定的,也不是保证在语言的未来版本中为 true。

C# 4.0 规范中唯一提到匿名类型的类型名称是在 7.6.10.6 中;

匿名类型的名称由 编译器,不能在程序文本中引用。

换句话说,没有给出或暗示任何保证,编译器可以自由生成任何名称。