0
Давайте предположим, что у меня есть следующий делегат:Используйте отражение, чтобы найти имя поля делегата
public delegate void Example();
и класс, такие как следующее:
public class TestClass {
Example FailingTest =() => Assert.Equal(0,1);
}
Как я могу использовать отражение для получить имя «FailedTest»?
До сих пор я пытался:
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».
Сохраняется ли эта информация во время выполнения или потеряна, когда назначен анонимный делегат?
Я получил те же результаты, используя VS2008SP1. – Andy
Это сработало для меня; каким-то образом я пропустил BindingFlags.Instance и пытался получить эту информацию от Type, затем прочитал значение анонимного метода; использование экземпляра делало трюк. Благодаря! –