4

在我的 C# 代码中,我想将其包装Debug.WriteLine()Console.WriteLine()一个函数,以便它在调试模式下以调试窗口为目标,在发布模式下以控制台为目标。实现它的最佳方法是什么?我是 C# 新手。谢谢。

4

3 回答 3

4

查看System.Diagnostics.Trace类。

Trace 包含一个类似于 Debug 和 Console 类的 WriteLine() 方法,并支持在运行时或通过配置文件附加/分离各种侦听器,例如ConsoleTraceListerDefaultTraceListner(用于调试)、TextWriterTraceListener(用于文件)、EventLogTraceListener,或者您可以创建用于写入数据库表或 syslogd 聚合器等位置的内容。

您几乎可以将当前对 Debug 或 Console 的每个调用更改为使用 Trace,并且只需设置要使用的侦听器。请注意, Trace 方法缺少一些格式化功能,但我认为可配置的输出源足以弥补它。

于 2013-02-05T05:45:13.430 回答
4

始终使用 Debug.WriteLine 并将这些行添加到程序的开头:

#if !DEBUG
            var listeners = new TraceListener[] { new TextWriterTraceListener(Console.Out) };
            Debug.Listeners.AddRange(listeners);
#endif
于 2013-02-05T08:07:03.783 回答
1

除了乔尔的回答,另一个非常简单的解决方案是:

private void writeLine(String s)
{

    #if DEBUG
        Debug.WriteLine(s);
    #else
        Console.WriteLine(s);
    #endif
}

这使用预处理器指令,因此它不会写入控制台,除非在发布模式下。请注意,它有点多余,因为Debug无论如何在发布构建期间都会删除所有调用,即使没有预处理器指令也是如此。

于 2013-02-05T06:00:01.000 回答