获取作为参数传递的委托的方法名称(Compact Framework)

时间:2017-08-28 23:16:20

标签: c# reflection lambda delegates 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))并从中获取名称,但CF上也没有System.Linq.Expressions

有没有办法在紧凑框架3.5的束缚中检索lambda调用的函数的名称?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有办法得到它(你也无法获得调用者名称,除了抛出异常并手动解析堆栈跟踪)。请记住,您使用的CF已经十年了。即便如此,它还没有完整框架的所有细节。