【发布时间】:2010-03-23 20:25:07
【问题描述】:
如何通过反射识别匿名方法?
【问题讨论】:
-
你能多说一些你想要完成的事情吗?
标签: c# reflection anonymous-methods
如何通过反射识别匿名方法?
【问题讨论】:
标签: c# reflection anonymous-methods
查看方法的属性,看方法是否用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 编译器将匿名方法转换为命名方法和类型的方式完全是实现定义的,不能依赖(这意味着,例如,它可以随着任何更新而改变,即使在次要版本/修补程序中也是如此)。
【讨论】:
据我所知,正则表达式模式是:
<(\w|_)+>b_.+
【讨论】: