Определите, является ли FieldInfo фоном, созданным компилятором - PullRequest
4 голосов
/ 14 апреля 2010

Заголовок в значительной степени говорит сам за себя, откуда мне знать, получаю ли я сгенерированный компилятором backingfield для {get; set;} свойство?

Я использую этот код для получения моего FieldInfos:

Class MyType
{
    private int foo;
    public int bar {get; private set; }
}

Type type = TypeOf(MyType);
foreach (FieldInfo fi in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.NonPublic))
{
    // Gets both foo and bar, however bar is called <bar>k__backingfield.
}

поэтому вопрос в том, могу ли я как-то обнаружить, что FieldInfo является опорным полем, не полагаясь на проверку его имени? (Что довольно недокументировано и может быть сломано в следующей версии фреймворка)

1 Ответ

9 голосов
/ 14 апреля 2010

Отметьте .IsDefined(typeof(CompilerGeneratedAttribute), false); на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...