是否有可能拦截控制台输出?

我调用了一个方法,比如FizzBuzz() ,我无法控制它。 这个方法使用Console.WriteLine输出一堆东西到控制台。

是否可以拦截由FizzBuzz方法生成的输出? 请注意我的应用程序本身就是一个控制台应用

是的,非常有可能:

 var consoleOut = new StringWriter(); Console.SetOut(consoleOut); Console.WriteLine("This is intercepted."); // This is not written to console File.WriteAllText("ConsoleOutput.txt", consoleOut.ToString()); 

稍后如果要停止拦截控制台输出,请使用以下修改:

 var stdOut = Console.Out; // Above interceptor code here.. Console.SetOut(stdOut); // Now all output start going back to console window 

或者, OpenStandardOutput不需要先保存标准stream,

 // Above interceptor code here.. var standardOutput = new StreamWriter(Console.OpenStandardOutput()); standardOutput.AutoFlush = true; Console.SetOut(standardOutput); // Now all output starts flowing back to console