繁体   English   中英

获取作为参数传递的委托的方法名称(紧凑框架)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM