我知道你能做到
this.GetType().FullName
得到
My.Current.Class
但我该打什么电话
My.Current.Class.CurrentMethod
我知道你能做到
this.GetType().FullName
得到
My.Current.Class
但我该打什么电话
My.Current.Class.CurrentMethod
当前回答
从c#版本6开始,你可以简单地调用:
string currentMethodName = nameof(MyMethod);
在c#版本5和。net 4.5中,你可以使用[CallerMemberName]属性让编译器自动生成一个字符串参数中的调用方法的名称。其他有用的属性是[CallerFilePath],用于让编译器生成源代码文件路径,[CallerLineNumber]用于获取进行调用的语句在源代码文件中的行号。
在此之前,还有一些更复杂的方法来获取方法名,但要简单得多:
void MyMethod() {
string currentMethodName = "MyMethod";
//etc...
}
尽管重构可能不会自动修复它。
如果你完全不关心使用Reflection的(可观的)成本,那么这个helper方法应该是有用的:
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;
}
其他回答
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。
从c#版本6开始,你可以简单地调用:
string currentMethodName = nameof(MyMethod);
在c#版本5和。net 4.5中,你可以使用[CallerMemberName]属性让编译器自动生成一个字符串参数中的调用方法的名称。其他有用的属性是[CallerFilePath],用于让编译器生成源代码文件路径,[CallerLineNumber]用于获取进行调用的语句在源代码文件中的行号。
在此之前,还有一些更复杂的方法来获取方法名,但要简单得多:
void MyMethod() {
string currentMethodName = "MyMethod";
//etc...
}
尽管重构可能不会自动修复它。
如果你完全不关心使用Reflection的(可观的)成本,那么这个helper方法应该是有用的:
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;
}
我认为获得全名的最好方法是:
this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name;
或者试试这个
string method = string.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name);
调用System.Reflection.MethodBase.GetCurrentMethod()。方法中的名称。
System.Reflection.MethodBase.GetCurrentMethod()。Name不是一个很好的选择,因为它只显示方法名而没有其他信息。
类似于string MyMethod(string str),上述属性将只返回MyMethod,这是不够的。
最好使用System.Reflection.MethodBase.GetCurrentMethod().ToString(),它将返回整个方法签名…