我有一个System.IO.TextWriter的实例。它可以从System.Console传入。任何方法找出它是控制台而不会导致异常?我尝试了这个但没有编译:
if (_myWriter as System.Console != null ) // error compiling
我想我必须使用类型检查而不是拳击?
答案 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可以重定向到文件。您的代码是否仍希望将其视为控制台?