Я пытаюсь собрать атрибуты, применяемые к методу IEnumerator, на основе экземпляра перечислителя. Например:
static class Program {
[SomeAttribute("Hello")]
static IEnumerator Test() {
yield return 1;
yield return "x";
}
static void Main() {
var foo = Test();
// ... How to get the attribute from the 'foo' instance?
}
}
foo.GetType()
возвращает сгенерированный тип Program.<Test>d__4
, поэтому кажется, что он в некоторой степени осведомлен о методе, который его сгенерировал. Как я могу работать в обратном направлении, чтобы найти MethodInfo Test
? Оттуда я могу получить атрибут.
Я также попытался выполнить поиск по типу Program
в свойстве MethodInfo.ReturnType
каждого из его методов, чтобы найти тот, который возвращает Program.<Test>d__4
. К моему удивлению, MethodInfo, который я хочу, просто указывает тип возвращаемого значения System.Collections.IEnumerator
.
Может быть, кто-то, кто немного лучше понимает внутренности, может объяснить, как я могу получить MethodInfo из сгенерированного типа или наоборот.
Спасибо.