2017-08-28 8 views
0

J'ai une fonction qui prend un Func en paramètre, l'invoque et affiche des résultats. À des fins de journalisation, il serait intéressant de pouvoir accéder au nom de la fonction qui est appelée lorsque l'expression lambda est exécutée. Y a-t-il un moyen de le faire dans un cadre compact?Obtenir le nom de la méthode d'un délégué passé en paramètre (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 

Exemple d'utilisation:

tryWithLogging(Function() myFunction([arbitrary params]) 
'desired output: "Invoked myFunction" 

Voici ce que j'ai essayé de récupérer le nom:

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 

J'ai aussi essayé passer un Expression(Of Func(Of Boolean)) au lieu et d'obtenir le nom de cela, mais System.Linq.Expressions n'est pas disponible sur CF.

Existe-t-il un moyen de récupérer le nom d'une fonction invoquée par un lambda dans les chaînes de la structure compacte 3.5?

+0

Quelque chose comme ça? https://stackoverflow.com/questions/12098267/how-can-i-get-the-name-of-the-calling-function-in-c?noredirect=1&lq=1 –

+0

@LB peut-être que je me méprends sur votre lien , mais je ne pense pas que 'CallerMemberName' m'aidera. Je veux le nom de la méthode _being_ invoquée dans le lambda, pas le nom de la fonction faisant l'invocation. – Cobalt

Répondre

0

Malheureusement non, il n'y a aucun moyen de l'obtenir (vous ne pouvez pas obtenir le nom de l'appelant non plus, à moins de lancer une exception et d'analyser manuellement la trace de la pile). Gardez à l'esprit que les FC que vous utilisez datent d'une décennie. Même alors, il n'avait pas toutes les subtilités du cadre complet.