您可以使用CallerMemberNameAttribute
来显示呼叫者的姓名。
public void WriteDebug(string message, [CallerMemberName] string memberName = "")
{
Debug.Write("[" + memberName + "] " + message);
}
您还可以使用它来包含此信息以进行更多诊断CallerLineNumberAttribute
。CallerFilePathAttribute
这些属性在 MSDN 上有详细描述。结合[Conditional("DEBUG")]
on 方法,您可以在调试期间提供大量信息,而这些信息在发布版本中完全消除。
我知道 C# 中没有内联,但是对于这种情况是否有另一种解决方案,除了使用'snippets',以免重复这样的语句?
请注意,这实际上与“内联”没有直接关系,与获取调用成员的诊断信息一样。话虽如此,当您的代码运行时,JIT 肯定会执行内联,这是 C# 具有良好性能的主要原因之一。
这需要 Visual Studio 2012,因为它使用该版本中的新编译器功能来运行。
如果您使用的是较旧的编译器,另一种选择是使用StackTrace
提取堆栈跟踪信息。但是,这会对性能产生相当大的影响,因此我不会在紧密循环中使用它,至少不会在生产环境中使用它,尽管它仍然可以在调试期间进行诊断。
string callingMethodName = (new StackTrace()).GetFrame(1).GetMethod().Name;