阻止方法调用的控制台输出

时间:2019-04-23 03:57:17

标签: c# multithreading

我正在做类似的事情

{% for item in coursename %} 
   <p>{{ item }}</p>
{% endfor %]

interface ICalculable { public int Calculate(int input); } BigMethod(ICalculable calculable) { Console.Write("Sequence:"); for (int i = 0; i < 3; i++) { int result = calculable.Calculate(i); Console.Write($" {i}:{result}"); } } 内部运行的任何代码都不应写入控制台。

即使我传递了一个实例,我也不希望传递给ICalculable#Calculate的{​​{1}}能够中断ICalculable的控制台输出

BigMethod

在控制台上看到的输出应该是

BigMethod

class MyCalculable : ICalculable { public int Calculate(int input) { Console.Write("ruin output"); return 0; } } 应该可以使对Sequence: 0:0 1:0 2:0 的呼叫静音。

有办法吗?


我已经考虑过使用BigMethod,但我希望Calculate的输出可流式传输。

1 个答案:

答案 0 :(得分:1)

您可以使用Console.SetOutConsole.Out

public static void Main()
{
   Console.Write("Hello ");

   // current output
   var current = Console.Out;

   // change the output to somewhere else
   Console.SetOut(new StreamWriter(Stream.Null));

   Run();

   // revert back
   Console.SetOut(current);

   Console.WriteLine("there");
}

private static void Run()
{
   Console.Write("Doctor, please keep touching me ");
}

输出

Hello there

但是,这似乎有点可疑 / XY ,并且如果您正在执行线程处理,则很容易产生怪异的结果。