[英]Get PropertyInfo of a parameter passed as lambda expression | Compact Framework, C#
[英]Get method name of a delegate passed as a parameter (Compact Framework)
我有一个将Func作为参数,调用它并输出一些结果的函数。 出于日志记录的目的,最好能够访问在执行lambda表达式时实际调用的函数的名称。 有没有办法在紧凑的框架中做到这一点?
Private Function tryWithLogging(ByVal moveFunc As Func(Of Boolean)) As Boolean
Try
moveFunc.Invoke()
Dim nameOfMethod as String = '??????
Console.WriteLine("Invoked " & nameOfMethod)
Catch ex As Exception
End Try
End Function
用法示例:
tryWithLogging(Function() myFunction([arbitrary params])
'desired output: "Invoked myFunction"
这是我尝试检索的名称:
moveFunc.Method.Name 'returns whatever the compiler decided to name the lambda
New StackTrace().GetFrame(1).GetMethod().Name 'works, but is not available on CF
我也尝试过传递一个Expression(Of Func(Of Boolean))
并从中获取名称,但是System.Linq.Expressions
在CF上也不可用。
在紧凑框架3.5的束缚中,有什么方法可以检索由lambda调用的函数的名称吗?
不幸的是,没有,也没有办法获得它(您也无法获得调用方名称,缺少抛出异常并手动解析堆栈跟踪)。 请记住,您使用的CF已经使用了整整十年。 即使那样,它也没有完整框架的所有优点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.