40 votes

Obtenir le nom de la fonction appelante à partir de la fonction appelée

Duplicata possible :
Comment puis-je trouver la méthode qui a appelé la méthode actuelle ?

Comment puis-je obtenir le nom de la fonction appelante à partir de la fonction appelée en C# ?

1 votes

2 votes

Il s'agit d'un doublon, mais cela vaut probablement la peine de le garder ouvert en raison de la terminologie différente - cela pourrait être utile pour les personnes qui font des recherches.

3 votes

@Keith : oui, c'est pour cette raison que nous essayons généralement de conserver les questions dupliquées lorsqu'elles sont posées d'une manière sensiblement différente - c'est pourquoi les fermer ajoute automatiquement les liens en haut de la page, afin que les futurs chercheurs puissent trouver les réponses plus rapidement.

88voto

Ben M Points 14458
new StackFrame(1, true).GetMethod().Name

Il convient de noter que dans les versions publiées, le compilateur peut inclure la méthode appelée, auquel cas le code ci-dessus renverrait l'appelant de l'appelant, donc pour être sûr, vous devez décorer votre méthode avec :

[MethodImpl(MethodImplOptions.NoInlining)]

12 votes

Sachez que le fait de parcourir la pile de cette manière impose une baisse de performance assez importante. Je recommande vivement de chercher une solution qui n'implique pas de parcours de la pile avant d'en faire usage.

2 votes

Cette réponse est en fait meilleure que les réponses de la question dupliquée en raison de la mention de l'attribut MethodImpl.

10 votes

Je sais qu'il s'agit d'un doublon et qu'il s'agit de .net 3.5, mais pour aider les chercheurs qui tombent sur cette question en premier (comme moi), il serait bon d'indiquer dans votre réponse que dans C# 5.0 vous pouvez maintenant utiliser les informations sur l'appelant comme décrit dans : visualstudiomagazine.com/articles/2012/11/01/

18voto

Joe Caffeine Points 686

Vous obtiendrez ainsi le nom de la méthode dans laquelle vous vous trouvez :

string currentMethod = System.Reflection.MethodBase.GetCurrentMethod().Name;

A utiliser avec précaution, car il pourrait y avoir un impact sur les performances.

To get callers:
StackTrace trace = new StackTrace();
int caller = 1;

StackFrame frame = trace.GetFrame(caller);

string callerName = frame.GetMethod().Name;

Cette méthode utilise un parcours de la pile pour obtenir le nom de la méthode. La valeur de caller indique jusqu'où remonter dans la pile d'appels. Faites attention à ne pas aller trop loin.

1 votes

J'ai besoin de savoir quelle méthode appelle la méthode courante.

0 votes

La façon dont vous obtenez le nom de l'appelant à partir de la trace de la pile, cela va-t-il nuire aux performances ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X