编译器似乎总是命名匿名类型,以便它们包含“AnonymousType”。
new { Name = "Sean"}.GetType().Name // Gives: <>f__AnonymousType0`1
这可以依靠吗?
编译器似乎总是命名匿名类型,以便它们包含“AnonymousType”。
new { Name = "Sean"}.GetType().Name // Gives: <>f__AnonymousType0`1
这可以依靠吗?
不,你不能依赖它。C# 规范没有指定编译器生成类型的名称。因此编译器的未来版本(或替代实现,如单声道)可能会选择不同的命名方案。
今天的 C# 编译器确实会将名称 AnonymousType 作为 IL 中生成名称的一部分。
不过,这严格来说是一个实现细节。它不是由语言指定的,也不是保证在该语言的未来版本中是真实的
C# 4.0 规范中唯一提到匿名类型的类型名称的是 7.6.10.6;
匿名类型的名称由编译器自动生成,不能在程序文本中引用。
换句话说,没有给出或暗示的保证,编译器可以自由生成任何名称。