Я знаю, что вы можете сделать
this.GetType().FullName
Редактировать любезно предоставлено @Pasi Savolainen
Чтобы получить
My.Current.Class
Но что я могу вызвать, чтобы получить
My.Current.Class.CurrentMethod
Я знаю, что вы можете сделать
this.GetType().FullName
Редактировать любезно предоставлено @Pasi Savolainen
Чтобы получить
My.Current.Class
Но что я могу вызвать, чтобы получить
My.Current.Class.CurrentMethod
StackTrace st = new StackTrace ();
StackFrame sf = st.GetFrame (0);
MethodBase currentMethodName = sf.GetMethod ();
Или, если вы хотите иметь вспомогательный метод:
[MethodImpl(MethodImplOptions.NoInlining)]
public string GetCurrentMethod ()
{
    StackTrace st = new StackTrace ();
    StackFrame sf = st.GetFrame (1);
    return sf.GetMethod().Name;
}
Обновлен с помощью кредитов для @stusmith.
Вызвать System.Reflection.MethodBase.GetCurrentMethod().Name из метода.
Отражение имеет умение скрывать лес за деревьями. У вас никогда не будет проблемы с точным и быстрым получением текущего имени метода:
void MyMethod() {
  string currentMethodName = "MyMethod";
  //etc...
}
Хотя инструмент рефакторинга, вероятно, не будет исправлять его автоматически.
Если вам полностью не нужна (значительная) стоимость использования Reflection, то этот вспомогательный метод должен быть полезен:
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;
} 
Обновление: С# версия 5 и .NET 4.5 имеют золотое решение этой общей потребности, вы можете использовать атрибут
Я думаю, что лучший способ получить полное имя:
 this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name;
или попробуйте это
string method = string.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name);   
Вы также можете использовать MethodBase.GetCurrentMethod(), который запретит компилятору JIT встраивать метод, в котором он использовался.
Update:
Этот метод содержит специальное перечисление StackCrawlMark, которое из моего понимания укажет компилятору JIT, что текущий метод не должен быть встроен.
Это моя интерпретация комментария, связанного с этим перечислением, присутствующим в SSCLI. Комментарий следует:
// declaring a local var of this enum type and passing it by ref into a function 
// that needs to do a stack crawl will both prevent inlining of the calle and 
// pass an ESP point to stack crawl to
// 
// Declaring these in EH clauses is illegal; 
// they must declared in the main method body
Не работает ли это?
System.Reflection.MethodBase.GetCurrentMethod()
Возвращает объект MethodBase, представляющий текущий исполняемый метод.
Пространство имен: System.Reflection
Сборка: mscorlib (в mscorlib.dll)
http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getcurrentmethod.aspx
Ну System.Reflection.MethodBase.GetCurrentMethod().Name не очень хороший выбор, потому что он просто отобразит имя метода без дополнительной информации.
Как и для string MyMethod(string str), указанное свойство вернет только MyMethod, что вряд ли возможно.
Лучше использовать System.Reflection.MethodBase.GetCurrentMethod().ToString(), который вернет всю подпись метода...
Проверьте это: http://www.codeproject.com/KB/dotnet/MethodName.aspx