我知道你能做到
this.GetType().FullName
得到
My.Current.Class
但我该打什么电话
My.Current.Class.CurrentMethod
我知道你能做到
this.GetType().FullName
得到
My.Current.Class
但我该打什么电话
My.Current.Class.CurrentMethod
当前回答
你也可以使用MethodBase.GetCurrentMethod(),它会阻止JIT编译器在使用它的地方内联方法。
更新:
该方法包含一个特殊的枚举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
其他回答
using System.Diagnostics;
...
var st = new StackTrace();
var sf = st.GetFrame(0);
var currentMethodName = sf.GetMethod();
或者,如果你想要一个helper方法:
[MethodImpl(MethodImplOptions.NoInlining)]
public string GetCurrentMethod()
{
var st = new StackTrace();
var sf = st.GetFrame(1);
return sf.GetMethod().Name;
}
更新到@ stussmith。
你也可以使用MethodBase.GetCurrentMethod(),它会阻止JIT编译器在使用它的地方内联方法。
更新:
该方法包含一个特殊的枚举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对象。 名称空间:系统。反射 程序集:mscorlib(在mscorlib.dll中)
http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getcurrentmethod.aspx
调用System.Reflection.MethodBase.GetCurrentMethod()。方法中的名称。
我认为获得全名的最好方法是:
this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name;
或者试试这个
string method = string.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name);