C# 如何区分.NET中编译器生成的类和用户类
我的程序中有一段代码,它通过检查编译器生成的类的类型名中是否包含“DisplayClass”来区分这些类。C# 如何区分.NET中编译器生成的类和用户类,c#,.net,reflection,compiler-construction,C#,.net,Reflection,Compiler Construction,我的程序中有一段代码,它通过检查编译器生成的类的类型名中是否包含“DisplayClass”来区分这些类。 阅读之后,我想我需要一个更好的方法。如何区分.NET中编译器生成的类和用户类?检查类的属性CompilerGenerated,以区分编译器生成的类和其他类 在reflector中,这些显示类可以如下所示: [CompilerGenerated] private sealed class <>c__DisplayClass1 {..} [编译生成] 专用密封c类显示器Clas
阅读之后,我想我需要一个更好的方法。如何区分.NET中编译器生成的类和用户类?检查类的属性
CompilerGenerated
,以区分编译器生成的类和其他类
在reflector中,这些显示类可以如下所示:
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{..}
[编译生成]
专用密封c类显示器Class1
{..}
这个答案真的帮了我大忙!下面是我需要添加的代码,用于检查编译器生成属性的类型,正如Valentin Kuzub所提到的:
using System.Runtime.CompilerServices;
//...
bool IsCompilerGenerated(Type t)
{
var attr = Attribute.GetCustomAttribute(t, typeof(CompilerGeneratedAttribute));
return attr != null;
}
注意:如果您自己自动生成代码,请使用GenerateCodeAttribute
,而不是CompilerGeneratedAttribute
,如图所示。