c# – 从表达式树中提取方法名称?
发布时间:2020-12-15 07:59:03 所属栏目:百科 来源:网络整理
导读:我正在尝试实现以下模式函数: MethodInfo GetMethod( ExpressionFuncTTarget,EventHandlerTEventArgs method) 如果需要,我可以提供TTarget的实例 所需的用法是: public static void Main(string[] args){ var methodInfo = GetMethodProgram,EventArgs(t =
我正在尝试实现以下模式函数:
MethodInfo GetMethod( Expression<Func<TTarget,EventHandler<TEventArgs>>> method) 如果需要,我可以提供TTarget的实例 所需的用法是: public static void Main(string[] args) { var methodInfo = GetMethod<Program,EventArgs>(t => t.Method); Console.WriteLine("Hello,world!"); } private void Method(object sender,EventArgs e) { } 这是我到目前为止所尝试的内容: private static MethodInfo GetMethod(TTarget target,Expression<Func<TTarget,EventHandler<TEventArgs>>> method) { var lambda = method as LambdaExpression; var body = lambda.Body as UnaryExpression; var call = body.Operand as MethodCallExpression; var mInfo = call.Method as MethodInfo; Console.WriteLine(mInfo); throw new NotImplementedException(); } 打印出来: System.Delegate CreateDelegate(System.Type,System.Object,System.Reflection.Met 解决方法
你在那里的一半.
看下面的代码 public static void Main(string[] args) { var program = new Program(); var methodInfo = GetMethod<Program,EventArgs>(()=> program.Method); Console.WriteLine(methodInfo.Name); } 并使用以下代码获取方法名称. static MethodInfo GetMethod<TTarget,TEventArgs>(Expression<Func<EventHandler<TEventArgs>>> method) where TEventArgs:EventArgs { var convert = method.Body as UnaryExpression; var methodCall = (convert.Operand as MethodCallExpression); if (methodCall != null && methodCall.Arguments.Count>2 && methodCall.Arguments[2] is ConstantExpression) { var methodInfo = (methodCall.Arguments[2]as ConstantExpression).Value as MethodInfo; return methodInfo; } return null; } 我希望这回答了你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – SSE类型的容器
- vb.net – Office加载项安装VSTO下载失败
- ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决
- Openfire Failed to load admin-sidebar.xml file from Ope
- .net – 从任务调用Thread.Sleep
- 如何将xml节点(作为字符串)附加到现有的XML Element节点(仅
- 纯干货分享: 如何在 React 框架中使用SpreadJS
- rails清理assets缓存的方法
- Swift 2.0学习笔记(Day 45)——重写方法
- Xcode 4:由于iPad模拟器的dylib错误,无法使用Enable Guard