Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何区分.NET中编译器生成的类和用户类_C#_.net_Reflection_Compiler Construction - Fatal编程技术网

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

C# 如何区分.NET中编译器生成的类和用户类,c#,.net,reflection,compiler-construction,C#,.net,Reflection,Compiler Construction,我的程序中有一段代码,它通过检查编译器生成的类的类型名中是否包含“DisplayClass”来区分这些类。 阅读之后,我想我需要一个更好的方法。如何区分.NET中编译器生成的类和用户类?检查类的属性CompilerGenerated,以区分编译器生成的类和其他类 在reflector中,这些显示类可以如下所示: [CompilerGenerated] private sealed class <>c__DisplayClass1 {..} [编译生成] 专用密封c类显示器Clas

我的程序中有一段代码,它通过检查编译器生成的类的类型名中是否包含“DisplayClass”来区分这些类。

阅读之后,我想我需要一个更好的方法。如何区分.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
,如图所示。