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# ?
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# ?
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)]
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.
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.
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/
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.
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.
1 votes
Duplicata de stackoverflow.com/questions/171970/
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.