2017-08-28 15 views
0

Funcをパラメータとして引数を呼び出し、結果を出力する関数があります。ロギング目的のために、ラムダ式が実行されたときに実際に呼び出されている関数の名前にアクセスできるようにするとよいでしょう。コンパクトなフレームワークでこれを行う方法はありますか?パラメータとして渡されるデリゲートのメソッド名を取得する(Compact Framework)

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のシャックル内のラムダによって呼び出されている関数の名前を取得する方法はありますか?

+0

これは何か? https://stackoverflow.com/questions/12098267/how-can-i-get-the-name-of-the-calling-function-in-c?noredirect=1&lq=1 –

+0

@LBおそらく私はあなたのリンクを誤解していますしかし、私は 'CallerMemberName'が私を助けてくれるとは思わない。呼び出す関数の名前ではなく、ラムダで呼び出されるメソッドの名前が必要です。 – Cobalt

答えて

0

残念ながら、それを取得する方法はありません(例外をスローして手動でスタックトレースを解析するのではなく、呼び出し元の名前を取得することはできません)。使用しているCFは10年前のことです。それでも、それは完全な枠組みのすべての細部を持っていませんでした。

関連する問題