问题描述
项目引用了别人写的一个类库,里面很多Console.WriteLine,我这本身也是要用Console输入输出一些东西这样控制台里显示就混乱了,现在不知道该怎么才能教你用引用的类库里的控制台输出
解决方案
解决方案二:
让那个别人把console都去掉。
解决方案三:
你就不要Console了,你log吧……
解决方案四:
自定义一个TextWriter,对WriteLine方法的调用进行过滤,如果不是你需要的内容就不要输出,如果是就输出。然后用Console.SetOut方法替换默认的输出为你自定义的TextWriter,这样就可以了。
解决方案五:
这恐怕不行吧.
解决方案六:
引用楼主wangfan027的回复:
项目引用了别人写的一个类库,里面很多Console.WriteLine,我这本身也是要用Console输入输出一些东西这样控制台里显示就混乱了,现在不知道该怎么才能教你用引用的类库里的控制台输出
介个你只能问提供类库的人改了~
解决方案七:
是的。在类库工程中弄一堆的Console.WriteLine,可想而知这种类库也不是什么正规产品中的,可用可不用。而你使用它时,连源代码都找不到,那么就更加证明不应该用它了。
解决方案八:
引用3楼effun的回复:
自定义一个TextWriter,对WriteLine方法的调用进行过滤,如果不是你需要的内容就不要输出,如果是就输出。然后用Console.SetOut方法替换默认的输出为你自定义的TextWriter,这样就可以了。
WriteLine之类的(以及相关的十几种不同写法相同功能的)方法,都归于要调用WriteChar之类的方法,要“过滤”也必须在对单个字符处理时去过滤。所以很难去区分到单个字符到底是自己工程输出的还是人家工程输出的。
解决方案九:
把你的输入输出重定向到另一个控制台就是了。
解决方案十:
引用7楼sp1234的回复:
Quote: 引用3楼effun的回复:
自定义一个TextWriter,对WriteLine方法的调用进行过滤,如果不是你需要的内容就不要输出,如果是就输出。然后用Console.SetOut方法替换默认的输出为你自定义的TextWriter,这样就可以了。WriteLine之类的(以及相关的十几种不同写法相同功能的)方法,都归于要调用WriteChar之类的方法,要“过滤”也必须在对单个字符处理时去过滤。所以很难去区分到单个字符到底是自己工程输出的还是人家工程输出的。
确实,我仔细看了一下TextWriter的说明,Write(Char)是最根本的方法,如果要从这个方法里去过滤的确很不容易。不过我觉得,假如对过滤的要求不是非常严格的话,通过适当重载WriteLine等方法还是可以做一个丑陋的实现,我考虑了两个方案:1、通过调用堆栈来判断是哪个程序集调用,对不希望的程序集直接忽略输出,不过这种方法在性能上可能会非常要命。2、对自己的输出做一些特别的标识,在检测到这些标识时输出,否则忽略输出。
解决方案十一:
又想到一个靠谱点的方法,不过调用会有些麻烦,参考下面的代码。classConsoleOut:TextWriter{privateConsoleOut(TextWriteroutput){_out=output;}privateTextWriter_out;publicoverrideEncodingEncoding{get{return_out.Encoding;}}publicoverridevoidWrite(charvalue){if(__outputEnabled)_out.Write(value);}privatestaticConsoleOut__instance;publicstaticvoidInstall(){if(__instance==null){__instance=newConsoleOut(Console.Out);Console.SetOut(__instance);}}privatestaticbool__outputEnabled;publicstaticboolOutputEnabled{get{return__outputEnabled;}set{__outputEnabled=value;}}}
//调用示范ConsoleOut.Install();Console.WriteLine("这行不会输出");ConsoleOut.OutputEnabled=true;Console.WriteLine("这行可以输出");ConsoleOut.OutputEnabled=false;Console.WriteLine("这行也不会输出");
解决方案十二:
ILSPY打开他另存为解决方案VS打开他//Console.WriteLine替换Console.WriteLineF5搞定