是否有 System.Diagnostics.Debug 类的 TextWriter 接口,用于 Console.Set



是否有任何内置功能可以将 Console.WriteLine 调用重定向到 System.Diagnostic.Debug-calls?

我希望有这样的事情:

public static void CallNastyConsoleWriteLineUsingFunction() {
    Console.WriteLine(GetImportantInformation());
}
[...]
var writer = DebugTextWriter();
TextWriter stdout = Console.Out;
try
{
    Console.SetOut(writer);
    CallNastyConsoleWriteLineUsingFunction();
}
finally
{
    Console.SetOut(stdout);
}

甚至可能:

using(new ConsoleToDebugRedirector())
{
    CallNastyConsoleWriteLineUsingFunction();
}

你可以做相反的事情。使用标准调试/跟踪调用,并将 ConsoleTraceListener 类添加到配置中。净效果应与标准编码/行为相同。

你可以做这样的事情:

public class Program
{
    public static void Main(string[] args)
    {
        using (new ConsoleRedirect<DebugTextWriter>())
        {
            Console.WriteLine("Testing testing...");
        }
        Console.WriteLine("Testing testing 2...");
        Console.ReadLine();
    }
}
public class ConsoleRedirect<T> : IDisposable
    where T : TextWriter, new()
{
    private readonly TextWriter _tmpTextWriter;
    public ConsoleRedirect()
    {
        _tmpTextWriter = Console.Out;
        Console.SetOut(new T());
    }
    public void Dispose()
    {
        Console.SetOut(_tmpTextWriter);
    }
}
public class DebugTextWriter : TextWriter
{
    public override void WriteLine(string value)
    {
        Debug.WriteLine(value);
    }
    public override void WriteLine(object value)
    {
        Debug.WriteLine(value);
    }
    public override void WriteLine(string format, params object[] arg)
    {
        Debug.WriteLine(format, arg);
    }
    public override Encoding Encoding
    {
        get { return Encoding.UTF8; }
    }
}

它会在 using 语句内将所有Console.WriteLine调用重定向到Debug.WriteLine。覆盖TextWriter的所有写入方法非常麻烦,但您可能可以在此答案中使用包装器

相关内容

  • 没有找到相关文章

最新更新