[英]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.