簡體   English   中英

是否有System.Diagnostics.Debug類的TextWriter接口,用於Console.SetOut?

[英]Is there a TextWriter interface to the System.Diagnostics.Debug class, for use with Console.SetOut?

有沒有內置的可以將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();
}

你可以這樣做:

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所有write方法非常麻煩,但你可以在這個答案中使用包裝器

你可以反過來。 使用標准的調試/跟蹤調用,並將ConsoleTraceListener類添加到您的配置中。 凈效應應與標准編碼/行為相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM