Nis*_*lla 6 c# methods system.reflection
我想从内部获取方法名称.这可以使用reflection如下所示完成.但是,我想在不使用的情况下得到它reflection
System.Reflection.MethodBase.GetCurrentMethod().Name
Run Code Online (Sandbox Code Playgroud)
示例代码
public void myMethod()
{
string methodName = // I want to get "myMethod" to here without using reflection.
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 25
从C#5开始,您可以让编译器为您填写,如下所示:
using System.Runtime.CompilerServices;
public static class Helpers
{
public static string GetCallerName([CallerMemberName] string caller = null)
{
return caller;
}
}
Run Code Online (Sandbox Code Playgroud)
在MyMethod:
public static void MyMethod()
{
...
string name = Helpers.GetCallerName(); // Now name=="MyMethod"
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过显式传入值来错误地使用它:
string notMyName = Helpers.GetCallerName("foo"); // Now notMyName=="foo"
Run Code Online (Sandbox Code Playgroud)
在C#6中,还有nameof:
public static void MyMethod()
{
...
string name = nameof(MyMethod);
...
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不保证您使用与方法名称相同的名称 - 如果您使用nameof(SomeOtherMethod)它,那么它"SomeOtherMethod"当然具有值.但是,如果你做对了,那么将名称重构MyMethod为其他东西,任何nameof不太合适的重构工具都会改变你的使用方式.
正如您所说,您不想使用反射,那么您可以使用System.Diagnostics获取方法名称,如下所示:
using System.Diagnostics;
public void myMethod()
{
StackTrace stackTrace = new StackTrace();
// get calling method name
string methodName = stackTrace.GetFrame(0).GetMethod().Name;
}
Run Code Online (Sandbox Code Playgroud)
注意:反射比堆栈跟踪方法快得多.
| 归档时间: |
|
| 查看次数: |
3357 次 |
| 最近记录: |