繁体   English   中英

如何找出TextWriter实例是控制台?

[英]How to find out TextWriter instance is a Console?

我有一个System.IO.TextWriter的实例。 它可以从System.Console中传入。 任何找到它的方法都是控制台而不会引起异常? 我尝试了这个但没有编译:

   if (_myWriter as System.Console != null ) // error compiling

我想我必须使用类型检查而不是装箱?

您可以在下面尝试类似IsConsoleOut的方法:

static void Main(string[] args)
{
     Console.WriteLine("Console.Out: {0}", IsConsoleOut(Console.Out));
     Console.WriteLine("Other: {0}", IsConsoleOut(new StreamWriter(Stream.Null)));
     Console.ReadLine();
}

private static bool IsConsoleOut(TextWriter textWriter)
{
     return object.ReferenceEquals(textWriter, Console.Out);
}

不幸的是,这并不是万无一失的证明,因为有人可以直接在Console输出流周围创建自己的TextReader(使用Console.OpenStandardOutput()获取该流),并且上面的函数将无法识别它,但前提是TextWriter具有总是来自Console.Out,它应该可以工作-我想!

您可以这样做:

if (_myWriter == Console.Out)

但这不能保证-例如,它可以是Console.Out的包装。

在这种情况下,为什么要区别对待? 围绕这种情况进行设计比对特殊情况的控制台编写者IMO更好。

if(_myWriter == System.Console.Out)

我建议您重新考虑用例。 例如,System.Console.Out可以重定向到文件。 您的代码是否仍要将其视为控制台?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM