Существует ли интерфейс TextWriter для класса System.Diagnostics.Debug для использования с Console.SetOut?
Есть ли что-нибудь встроенное, что может перенаправить вызовы Console.WriteLine на вызовы System.Diagnostic.Debug?
Я надеялся на что-то вроде этого:
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();
}
2 ответа
Вы можете сделать наоборот. Используйте стандартные вызовы Debug/Trace и добавьте класс 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; }
}
}
Это перенаправит все Console.WriteLine
звонки в Debug.WriteLine
в то время как внутри using
заявление. Это довольно громоздко переопределить все методы записи TextWriter
, но вы могли бы использовать оболочку в этом ответе