![](/img/trans.png)
[英]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.