How to identify anonymous methods in System.Reflection

扶醉桌前 提交于 2019-11-27 06:07:14

问题


How can you identify anonymous methods via reflection?


回答1:


Look at the attributes of the method, and see if the method is decorated with CompilerGeneratedAttribute.

Anonymous methods (as well as other objects, such as auto-implemented properties, etc) will have this attribute added.


For example, suppose you have a type for your class. The anonymous methods will be in:

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

This should return any anonymous methods defined on MyClass.




回答2:


You cannot, because there is no such thing as an anonymous method on IL level - they're all named, and all belong to named types. And the way C# and VB compilers translate anonymous methods to named methods and types is entirely implementation-defined, and cannot be relied on (which means that, for example, it can change with any update, even in minor releases / hotfixes).




回答3:


From what I can see, that Regex pattern would be:

<(\w|_)+>b_.+


来源:https://stackoverflow.com/questions/2503336/how-to-identify-anonymous-methods-in-system-reflection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!