Используйте отражение, чтобы найти имя поля делегата. - PullRequest
0 голосов
/ 20 марта 2009

Допустим, у меня есть следующий делегат:

public delegate void Example();

и такой класс, как следующий:

public class TestClass {
    Example FailingTest = () => Assert.Equal(0,1);
}

Как я могу использовать отражение, чтобы получить имя "FailingTest"?

Пока я пробовал:

var possibleFields = typeof(TestClass).GetFields(relevant_binding_flags)
                            .Where(x => x.FieldType.Equals(typeof(Example)));

foreach(FieldInfo oneField in possibleFields) {
  // HERE I am able to access the declaring type name
  var className = oneField.ReflectedType.Name; // == "TestClass"

  // but I am not able to access the field 
  // name "FailingTest" because:
  var fieldName = oneField.Name; // == "CS$<>9__CachedAnonymousMethodDelegate1"
}

Проходя через отладчик, я не могу найти путь к названию объявленного поля "FailingTest".

Эта информация сохраняется во время выполнения или теряется при назначении анонимного делегата?

1 Ответ

3 голосов
/ 20 марта 2009

Что BindingFlags вы переходите на GetFields? Я использовал это:

BindingFlags.NonPublic | BindingFlags.Instance

и я смог увидеть название поля.

...