416 votes

C# Comment obtenir le nom de la méthode actuelle à partir de code

Je sais que vous pouvez faire

Modifier avec la permission de @Pasi Savolainen

Pour obtenir

My.Current.Class

Mais ce que je peux appeler pour obtenir

My.Current.Class.CurrentMethod

564voto

Jamie Ide Points 28680

Appelez `` au sein de la méthode.

129voto

Hans Passant Points 475940

La réflexion a un talent pour cacher la forêt pour les arbres. Vous n'avez jamais de problème pour obtenir la méthode actuelle de nom rapidement et avec précision:

void MyMethod() {
  string currentMethodName = "MyMethod";
  //etc...
}

Bien qu'un outil de refactoring ne résoudra probablement pas automatiquement.

Même si vous n'avez pas de soins sur le (considérable) du coût de l'aide de la Réflexion puis cette méthode d'assistance devraient être utiles:

using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Reflection;
//...

[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetMyMethodName() {
  var st = new StackTrace(new StackFrame(1));
  return st.GetFrame(0).GetMethod().Name;
} 

Mise à jour: version C# 5 et .NET 4.5 avoir le golden solution à ce besoin commun, vous pouvez utiliser le [CallerMemberName] attribut pour le compilateur de générer automatiquement le nom de la méthode d'appel à un argument de type chaîne. D'autres attributs utiles sont [CallerFilePath] pour le compilateur de générer le code source du fichier chemin d'accès et [CallerLineNumber] pour obtenir le numéro de la ligne dans le fichier de code source pour la déclaration que fait l'appel.

38voto

Zakaria Points 76

Je pense que la meilleure façon d’obtenir le nom complet est :

ou essayez ceci

10voto

João Angelo Points 24422

Vous pouvez également utiliser `` qui empêchera le compilateur JIT de mettre Inline la méthode où il est utilisé.


Mise à jour :

Cette méthode contient une énumération spéciale `` qu’à partir de ma compréhension précisera au compilateur JIT que la méthode actuelle ne devrait pas être Inline.

Il s’agit de mon interprétation du commentaire associé à cette énumération présente dans SSCLI. L’observation suivante :

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