Как определить анонимные методы в Системе. Отражение

Как можно определить анонимные методы через отражение?

7
задан devlife 23 March 2010 в 20:25
поделиться

3 ответа

Посмотрите на атрибуты метода и убедитесь, что метод украшен CompilerGeneratedAttribute .

Анонимные методы (а также другие объекты, такие как автоматически реализуемые свойства и т. Д.) Будут иметь добавленный этот атрибут.


Например, предположим, что у вас есть типаж для вашего класса. Анонимные методы будут в:

Type myClassType = typeof(MyClass);
IEnumerable<MethodInfo> anonymousMethods = myClassType
    .GetMethods(
          BindingFlags.NonPublic
        | BindingFlags.Public 
        | BindingFlags.Instance 
        | BindingFlags.Static)
    .Where(method => 
          method.GetCustomAttributes(typeof(CompilerGeneratedAttribute)).Any());

Это должно возвращать все анонимные методы, определенные в MyClass .

8
ответ дан 6 December 2019 в 08:42
поделиться

Вы не можете, потому что на уровне IL не существует такой вещи, как анонимный метод - все они именованы и все принадлежат именованным типам. А способ, которым компиляторы C # и VB переводят анонимные методы в именованные методы и типы, полностью определяется реализацией и на него нельзя полагаться (что означает, например, что он может измениться с любым обновлением, даже в незначительных выпусках / исправлениях).

8
ответ дан 6 December 2019 в 08:42
поделиться

Из того, что я вижу, этот шаблон Regex будет таким:

<(\w|_)+>b_.+
5
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: