You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Console.IsOutputRedirected调用SetOut后未变化,是预期行为还是Bug?

这是预期行为,而非Bug

原因说明

Console.IsOutputRedirected的判断逻辑并非基于Console.Out是否被替换为自定义TextWriter,而是检查操作系统级别的标准输出流是否被重定向:

  • 只有当输出被操作系统层面的方式重定向时(比如命令行执行程序时使用> output.txt、管道传递等),该属性才会返回True。
  • 调用Console.SetOut仅仅是替换了控制台用于写入文本的TextWriter实例,并没有改变底层进程的标准输出流句柄状态,因此IsOutputRedirected依然会返回False。

代码验证

如果想要让IsOutputRedirected返回True,需要通过操作系统级别的重定向操作。例如在命令行执行你的程序时:

your-program.exe > output.txt

此时程序中的b1会输出True,因为标准输出流已经被系统重定向到文件。

替代方案

如果需要检测Console.Out是否被替换为自定义的写入器,可以自行维护状态标记,或者对比当前Console.Out与初始的默认实例:

// 保存初始的Console.Out实例
var originalOut = Console.Out;

var b1 = Console.Out == originalOut; // True
Console.SetOut(new StringWriter());
var b2 = Console.Out == originalOut; // False
Console.SetOut(new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = true });
var b3 = Console.Out == originalOut; // False(此处创建了新的StreamWriter,并非原实例)

Console.WriteLine(b1);
Console.WriteLine(b2);
Console.WriteLine(b3);

内容的提问来源于stack exchange,提问作者Guillermo-Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:43:10