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