Eoi*_*ell 21
请尝试使用它.
System.Reflection.MethodBase.GetCurrentMethod().Name
Run Code Online (Sandbox Code Playgroud)
C#不具有__LINE__或__FUNCTION__像C++宏,但也有等效
我目前使用的是这样的函数:
using System.Diagnostics;
public string __Function() {
StackTrace stackTrace = new StackTrace();
return stackTrace.GetFrame(1).GetMethod().Name;
}
Run Code Online (Sandbox Code Playgroud)
当我需要__FUNCTION__时,我只是调用__Function().例如:
Debug.Assert(false, __Function() + ": Unhandled option");
Run Code Online (Sandbox Code Playgroud)
当然这个解决方案也使用反射,但它是我能找到的最佳选择.由于我只将它用于调试(而不是在发布版本中进行跟踪),因此性能损失并不重要.
我想我应该做的是创建调试函数并用它们标记它们
[ Conditional("Debug") ]
Run Code Online (Sandbox Code Playgroud)
相反,但我还没有解决这个问题.
感谢Jeff Mastry 解决这个问题.
不幸的是,C#中没有该宏的等效版本.我不认为GetCurrentMethodName()解决方案等效于C++ __FUNCTION__宏.也就是说,因为C++版本是名称的编译时计算.对于C#,这是一个运行时计算,会导致性能下降.
我没有对成本的严重程度做任何假设,但有一个
以下内容应该可以工作,尽管它将在运行时而不是编译期间进行评估。
System.Reflection.MethodBase.GetCurrentMethod().Name
Run Code Online (Sandbox Code Playgroud)