Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过辅助方法打印当前执行的方法名称?_C#_.net_System.diagnostics - Fatal编程技术网

C# 如何通过辅助方法打印当前执行的方法名称?

C# 如何通过辅助方法打印当前执行的方法名称?,c#,.net,system.diagnostics,C#,.net,System.diagnostics,ExecutionMethodName用于打印调用方的方法名。例如: 静态无效主字符串[]参数{Auxiliary.ExecutingMethodName;}应打印Main 静态void Foo{Auxiliary.ExecutingMethodName;}应打印Foo 问题 上面的当前实现总是打印ExecutingMethodName,这不是我想要的。如何通过辅助方法打印当前执行的方法名称?只需在方法中的stackframe调用中将0更改为1 stackframe 0是调用堆栈中的当前位置,您

ExecutionMethodName用于打印调用方的方法名。例如:

静态无效主字符串[]参数{Auxiliary.ExecutingMethodName;}应打印Main

静态void Foo{Auxiliary.ExecutingMethodName;}应打印Foo

问题
上面的当前实现总是打印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);
}