好吧,让我再说清楚。我有一个包含许多类的控制台应用程序,在每个类中至少有一个Console.WriteLine(“text”)行。我定义了一些参数,在运行应用程序时,它输出的正是我在类中编写的内容。在那里,我想定义一个参数,当我使用此参数运行应用程序时,控制台屏幕上将没有输出但控制台窗口仍然出现。这个论点可能就像“-s”。那么,如果不在每个类中使用“if”条件并通过类传递参数,我能做到这一点吗?非常感谢。
P / S:我通过互联网搜索并发现了一些与此相关的文章,但大多数答案都是隐藏控制台窗口。我认为这个问题应该是其他人的意思。答案 0 :(得分:7)
使用Console.SetOut(http://msdn.microsoft.com/en-us/library/system.console.setout.aspx)并传入“null”文本编写器。 -s
上的想法会执行Console.SetOut(new StreamWriter())
。
Console.SetOut
方法的示例将帮助您入门。
此外,您可以使用此方法轻松添加日志记录。
答案 1 :(得分:4)
使用这些方法重定向输出(以编程方式):
Console.SetIn(...);
Console.SetOut(...);
Console.SetError(...);
答案 2 :(得分:3)
app.exe > nul
将输出重定向到无处。仅供参考:Using command redirection operators
答案 3 :(得分:3)
如果直接传递ArgumentNullException
,Console.SetOut
方法会抛出null
; StreamWriter
相同(如果您pass a stream或pass a string。
我使用的是将特殊Stream.Null
字段传递给StreamWriter
:
System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null);
这将流重定向到本质上为空设备(* NIX机器上的/dev/null
)。
答案 4 :(得分:0)
您是否遇到Console.Clear(),您可以通过一种方式调用此方式,使其看起来根本没有文字输出。
至于避免在每个类中单独定义它,你应该看看继承。这允许您在一个地方定义功能,每个“子”类将继承此功能。
答案 5 :(得分:0)
您可以使用log4net来定义要记录的项目。它允许您记录有关日志级别,关于要记录的类等的日志。
答案 6 :(得分:0)
这对我来说效果很好!:
Console.SetOut(StreamWriter.Null);
Console.SetError(StreamWriter.Null);
这不起作用:
Console.SetOut(null);
Console.SetError(null);
结果为ArgumentNullException
。
这不起作用:
Console.SetOut(new StreamWriter(null));
Console.SetError(new StreamWriter(null));
因为new StreamWriter(string path)
和new StreamWriter(Stream stream)
之间不明确。
最后 ,这些都不起作用:
Console.SetOut(new StreamWriter(default(string)));
Console.SetError(new StreamWriter(default(Stream)));
因为它们也会产生ArgumentNullException
。