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

时间:2009-07-22 16:02:03

标签: c#

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

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

我想我必须使用类型检查而不是拳击?

4 个答案:

答案 0 :(得分:2)

您可以尝试下面的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它应该工作 - 我想!

答案 1 :(得分:0)

你可以这样做:

if (_myWriter == Console.Out)

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

在这种情况下,您为什么要以不同方式对待它?围绕这个设计会比特殊情况的控制台编写者IMO更好。

答案 2 :(得分:0)

if(_myWriter == System.Console.Out)

答案 3 :(得分:0)

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