我的程序中有一段代码,通过检查编译器生成的类的类型名称中是否包含“DisplayClass”来区分它们。
阅读这个答案后,我想我需要一个更好的方法。如何区分 .NET 中编译器生成的类和用户类?
检查类的属性
CompilerGenerated
以区分编译器生成的类与其他类
在反射器中,那些 Display 类可以像这样看到:
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{..}
这个答案真的帮助了我!这是我需要添加的代码,用于检查
Type
是否为 Valentin Kuzub 提到的 CompilerGeneratedAttribute
:
using System.Runtime.CompilerServices;
//...
bool IsCompilerGenerated(Type t)
{
var attr = Attribute.GetCustomAttribute(t, typeof(CompilerGeneratedAttribute));
return attr != null;
}