Assembly.GetTypes()返回奇怪的类型名称,例如“ c”

使用Assembly.GetTypes()我得到Type.Namec....开头的类型。

我试图谷歌如果这是匿名类型或其他东西。 但无法得到一个非常好的答案。

Type上是否有属性表明这些类型是什么? 我不喜欢if(type.Name.StartsWith(""))

这些是编译器生成的显示类。 您可以通过查找CompilerGeneratedAttribute来区分它们:

 var attr = Attribute.GetCustomAttribute(type, typeof(CompilerGeneratedAttribute)); 

它们是编译器生成的类型,包括匿名类型,还包括由yield和由await生成的状态机结构生成的IEnumerableIEnumeratorIEnumerableIEnumerator实现。

他们将拥有CompilerGeneratedAttribute

你将这些名称描述为“奇怪”,并且它们是故意的。 它们都是有效的.NET名称,但在常见的.NET语言中无效,特别是C#和VB.NET。 这意味着您无法直接使用C#编码创建这样的类,因此不需要任何逻辑来检查程序员是否未创建匹配类。

这些是CompilerGeneratedAttribute类

区分编译器生成的元素和用户生成的元素。 这个类不能被inheritance。

你可以检查一下

 using System.Runtime.CompilerServices; bool CompilerGen(Type t) { var attr = Attribute.GetCustomAttribute(t, typeof(CompilerGeneratedAttribute)); return attr != null; }