如何禁用Console.WriteLine等输出

dceacho 2015-06-03 05:03:13
项目引用了别人写的一个类库,里面很多Console.WriteLine,
我这本身也是要用Console输入输出一些东西
这样控制台里显示就混乱了,现在不知道该怎么才能教你用引用的类库里的控制台输出
...全文
591 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_封爱 版主 2015-06-04
  • 打赏
  • 举报
回复
ILSPY打开他 另存为解决方案 VS打开他 //Console.WriteLine替换Console.WriteLine F5 搞定
effun 2015-06-04
  • 打赏
  • 举报
回复 1
又想到一个靠谱点的方法,不过调用会有些麻烦,参考下面的代码。

    class ConsoleOut : TextWriter
    {

        private ConsoleOut(TextWriter output)
        {
            _out = output;
        }

        private TextWriter _out;

        public override Encoding Encoding
        {
            get { return _out.Encoding; }
        }

        public override void Write(char value)
        {
            if (__outputEnabled)
                _out.Write(value);
        }

        private static ConsoleOut __instance;

        public static void Install()
        {
            if (__instance == null)
            {
                __instance = new ConsoleOut(Console.Out);
                Console.SetOut(__instance);
            }
        }

        private static bool __outputEnabled;

        public static bool OutputEnabled
        {
            get { return __outputEnabled; }
            set { __outputEnabled = value; }
        }
        
    }

            // 调用示范
            ConsoleOut.Install();

            Console.WriteLine("这行不会输出");
            ConsoleOut.OutputEnabled = true;
            Console.WriteLine("这行可以输出");
            ConsoleOut.OutputEnabled = false;
            Console.WriteLine("这行也不会输出");

effun 2015-06-04
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
[quote=引用 3 楼 effun 的回复:] 自定义一个TextWriter,对WriteLine方法的调用进行过滤,如果不是你需要的内容就不要输出,如果是就输出。 然后用Console.SetOut方法替换默认的输出为你自定义的TextWriter,这样就可以了。
WriteLine之类的(以及相关的十几种不同写法相同功能的)方法,都归于要调用WriteChar之类的方法,要“过滤”也必须在对单个字符处理时去过滤。所以很难去区分到单个字符到底是自己工程输出的还是人家工程输出的。[/quote] 确实,我仔细看了一下TextWriter的说明,Write(Char)是最根本的方法,如果要从这个方法里去过滤的确很不容易。 不过我觉得,假如对过滤的要求不是非常严格的话,通过适当重载WriteLine等方法还是可以做一个丑陋的实现,我考虑了两个方案: 1、通过调用堆栈来判断是哪个程序集调用,对不希望的程序集直接忽略输出,不过这种方法在性能上可能会非常要命。 2、对自己的输出做一些特别的标识,在检测到这些标识时输出,否则忽略输出。
devmiao 2015-06-03
  • 打赏
  • 举报
回复
把你的输入输出重定向到另一个控制台就是了。
  • 打赏
  • 举报
回复
引用 3 楼 effun 的回复:
自定义一个TextWriter,对WriteLine方法的调用进行过滤,如果不是你需要的内容就不要输出,如果是就输出。 然后用Console.SetOut方法替换默认的输出为你自定义的TextWriter,这样就可以了。
WriteLine之类的(以及相关的十几种不同写法相同功能的)方法,都归于要调用WriteChar之类的方法,要“过滤”也必须在对单个字符处理时去过滤。所以很难去区分到单个字符到底是自己工程输出的还是人家工程输出的。
  • 打赏
  • 举报
回复
是的。在类库工程中弄一堆的Console.WriteLine,可想而知这种类库也不是什么正规产品中的,可用可不用。 而你使用它时,连源代码都找不到,那么就更加证明不应该用它了。
江南小鱼 2015-06-03
  • 打赏
  • 举报
回复
引用 楼主 wangfan027 的回复:
项目引用了别人写的一个类库,里面很多Console.WriteLine, 我这本身也是要用Console输入输出一些东西 这样控制台里显示就混乱了,现在不知道该怎么才能教你用引用的类库里的控制台输出
介个你只能问提供类库的人改了~
tcmakebest 2015-06-03
  • 打赏
  • 举报
回复
这恐怕不行吧.
effun 2015-06-03
  • 打赏
  • 举报
回复
自定义一个TextWriter,对WriteLine方法的调用进行过滤,如果不是你需要的内容就不要输出,如果是就输出。 然后用Console.SetOut方法替换默认的输出为你自定义的TextWriter,这样就可以了。
  • 打赏
  • 举报
回复
你就不要Console了,你log吧……
  • 打赏
  • 举报
回复
让 那个 别人 把 console 都去掉。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧