C# 如何通过辅助方法打印当前执行的方法名称?
ExecutionMethodName用于打印调用方的方法名。例如: 静态无效主字符串[]参数{Auxiliary.ExecutingMethodName;}应打印Main 静态void Foo{Auxiliary.ExecutingMethodName;}应打印Foo 问题C# 如何通过辅助方法打印当前执行的方法名称?,c#,.net,system.diagnostics,C#,.net,System.diagnostics,ExecutionMethodName用于打印调用方的方法名。例如: 静态无效主字符串[]参数{Auxiliary.ExecutingMethodName;}应打印Main 静态void Foo{Auxiliary.ExecutingMethodName;}应打印Foo 问题 上面的当前实现总是打印ExecutingMethodName,这不是我想要的。如何通过辅助方法打印当前执行的方法名称?只需在方法中的stackframe调用中将0更改为1 stackframe 0是调用堆栈中的当前位置,您
上面的当前实现总是打印ExecutingMethodName,这不是我想要的。如何通过辅助方法打印当前执行的方法名称?只需在方法中的stackframe调用中将0更改为1 stackframe 0是调用堆栈中的当前位置,您需要后退一步:
public static void ExecutingMethodName()
{
Console.WriteLine(new StackFrame(1).GetMethod().Name);
}
只需在方法stackframe调用中将0更改为1 stackframe 0是调用堆栈中的当前位置,您需要后退一步:
public static void ExecutingMethodName()
{
Console.WriteLine(new StackFrame(1).GetMethod().Name);
}
使用下面的代码。您必须使用StackFrame1,StackFrame2将始终是ExecutionMethodName,实际上您必须打印ExecutionMethodName的调用者 你可以参考 在C5中,它变得更容易了
使用下面的代码。您必须使用StackFrame1,StackFrame2将始终是ExecutionMethodName,实际上您必须打印ExecutionMethodName的调用者 你可以参考 在C5中,它变得更容易了
必须跳过堆栈帧中属于ExecutingMethodName的第一个条目:
必须跳过堆栈帧中属于ExecutingMethodName的第一个条目: 使用堆栈帧,而不是使用堆栈帧中的内容。更干净的方式
public static void ExecutingMethodName([CallerMemberName]string callerName= null)
{
Console.WriteLine(callerName);
}
使用堆栈帧,而不是使用堆栈帧中的内容。更干净的方式
public static void ExecutingMethodName([CallerMemberName]string callerName= null)
{
Console.WriteLine(callerName);
}
投票通过。好主意。初始化callerName=null的目的是什么?将CallerMemberName属性应用于具有默认值的可选参数。必须为可选参数指定显式默认值。不能将此属性应用于未指定为可选的参数。从提供的MSDN链接。投票通过。好主意。初始化callerName=null的目的是什么?将CallerMemberName属性应用于具有默认值的可选参数。必须为可选参数指定显式默认值。不能将此属性应用于未指定为可选的参数。从提供的MSDN链接。
public static void ExecutingMethodName([CallerMemberName]string callerName= null)
{
Console.WriteLine(callerName);
}