如何在System.Reflection中识别匿名方法

时间:2010-03-23 20:25:07

标签: c# reflection anonymous-methods

如何通过反射识别匿名方法?

3 个答案:

答案 0 :(得分:8)

查看方法的属性,看看该方法是否用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上定义的任何匿名方法。

答案 1 :(得分:8)

你不能,因为在IL级别上没有匿名方法这样的东西 - 它们都被命名,并且都属于命名类型。 C#和VB编译器将匿名方法转换为命名方法和类型的方式完全是实现定义的,并且不能依赖(例如,它可以随着任何更新而改变,即使在次要版本/修补程序中也是如此)。 / p>

答案 2 :(得分:5)

从我所看到的,Regex模式将是:

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