【问题标题】:C# Console.Writeline Placeholders for function name函数名称的 C# Console.Writeline 占位符
【发布时间】:2023-03-31 09:53:02
【问题描述】:

使用 Console.Writeline() 时,当前函数的名称是否有占位符?

【问题讨论】:

  • 在 Console.WriteLine 中是否有任何表示当前执行方法/属性名称的“魔法标记”。
  • 这正是我的意思。对于不清楚的地方,我深表歉意。

标签: c# console.writeline


【解决方案1】:

我相信这就是您要寻找的:

using System.Diagnostics;

StackTrace stackTrace = new StackTrace();
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);

【讨论】:

    【解决方案2】:

    在反射中,您可以选择 MethodBase.GetCurrentMethod()。

    【讨论】:

    • 可能值得补充的是,这可能很昂贵。
    • 我很确定它没有 Console.WriteLine 贵。
    • @zmbq - 公平点 - 但与 Console.WriteLine 相比几乎 only (这非常慢)。与您可能正在做的其他事情以及其他形式的日志记录相比,这可能不是您想要随意散布的东西。
    • @Rob,StackFrame.GetMethod() 更快吗?
    • 从我非常粗略的微基准测试或同时运行 100000 次 - 看起来它是 MethodBase.GetCurrentMethod 快 5 倍以上(假设您每次都创建一个 StackFrame 的新实例。这是一个相当虽然是粗略的微基准!-不要太认真!
    【解决方案3】:

    http://www.codeproject.com/Articles/7964/Logging-method-name-in-NET

    另一个(更好的)日志记录选项是AOP,使用诸如PostSharp之类的框架

    【讨论】:

      【解决方案4】:

      除非您想使用反射,否则不会。但是,C# 5 将包含一个名为“调用者信息属性”的新功能,它将在编译时插入信息。见http://bartwullems.blogspot.com/2012/02/c-5-caller-info-attributes.html

      【讨论】:

        猜你喜欢
        • 2015-08-22
        • 1970-01-01
        • 2013-10-19
        • 2011-07-26
        • 2014-04-11
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        相关资源
        最近更新 更多