Как отличить сгенерированные компилятором классы от пользовательских классов в .NET - PullRequest
6 голосов
/ 21 июня 2011

В моей программе есть фрагмент кода, который различает сгенерированные компилятором классы, проверяя, содержат ли они «DisplayClass» в своем имени типа.прочитав этот ответ , я думаю, что мне нужен лучший способ.Как отличить сгенерированные компилятором классы от пользовательских классов в .NET?

Ответы [ 2 ]

13 голосов
/ 21 июня 2011

Проверьте классы для атрибута CompilerGenerated, чтобы отличить сгенерированные компилятором классы от других

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

В отражателе эти Display классы можно увидеть так:

[CompilerGenerated]
private sealed class <>c__DisplayClass1
{..}
7 голосов
/ 27 марта 2013

Этот ответ действительно помог мне! Вот код, который мне нужно было добавить, чтобы проверить Type для CompilerGeneratedAttribute, как отметил Валентин Кузуб:

using System.Runtime.CompilerServices;

//...

bool IsCompilerGenerated(Type t)
{
    var attr = Attribute.GetCustomAttribute(t, typeof(CompilerGeneratedAttribute));
    return attr != null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...