簡體   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