当前位置:  开发笔记 > 编程语言 > 正文

__FUNCTION__宏的C#版本

如何解决《__FUNCTION__宏的C#版本》经验,为你挑选了3个好方法。

有没有人对C++ __FUNCTION__宏的C#版本有一个很好的解决方案?编译器似乎不喜欢它.



1> Eoin Campbel..:

请尝试使用它.

System.Reflection.MethodBase.GetCurrentMethod().Name

C#不具有__LINE____FUNCTION__像C++宏,但也有等效


由于这个是顶级的并且被接受,你/某人可以添加:System.Reflection.MethodBase.GetCurrentMethod().ToString()也会产生params,因此它在重载和System.Reflection.MethodBase.GetCurrentMethod面前不会模棱两可().DeclaringType.ToString()给出C名称(&namespace)

2> Mark Booth..:

我目前使用的是这样的函数:

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 解决这个问题.



3> JaredPar..:

不幸的是,C#中没有该宏的等效版本.我不认为GetCurrentMethodName()解决方案等效于C++ __FUNCTION__宏.也就是说,因为C++版本是名称的编译时计算.对于C#,这是一个运行时计算,会导致性能下降.

我没有对成本的严重程度做任何假设,但有一个

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有