Как можно определить анонимные методы через отражение?
Посмотрите на атрибуты метода и убедитесь, что метод украшен 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
.
Вы не можете, потому что на уровне IL не существует такой вещи, как анонимный метод - все они именованы и все принадлежат именованным типам. А способ, которым компиляторы C # и VB переводят анонимные методы в именованные методы и типы, полностью определяется реализацией и на него нельзя полагаться (что означает, например, что он может измениться с любым обновлением, даже в незначительных выпусках / исправлениях).
Из того, что я вижу, этот шаблон Regex будет таким:
<(\w|_)+>b_.+