如何区分.NET中编译器生成的类和用户类

问题描述 投票:0回答:2

我的程序中有一段代码,通过检查编译器生成的类的类型名称中是否包含“DisplayClass”来区分它们。
阅读这个答案后,我想我需要一个更好的方法。如何区分 .NET 中编译器生成的类和用户类?

c# .net reflection
2个回答
15
投票

检查类的属性

CompilerGenerated
以区分编译器生成的类与其他类

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.compiler generatedattribute.aspx

在反射器中,那些 Display 类可以像这样看到:

[CompilerGenerated]
private sealed class <>c__DisplayClass1
{..}

7
投票

这个答案真的帮助了我!这是我需要添加的代码,用于检查

Type
是否为 Valentin Kuzub 提到的
CompilerGeneratedAttribute

using System.Runtime.CompilerServices;

//...

bool IsCompilerGenerated(Type t)
{
    var attr = Attribute.GetCustomAttribute(t, typeof(CompilerGeneratedAttribute));
    return attr != null;
}
© www.soinside.com 2019 - 2024. All rights reserved.