为Console.Write添加前缀的推荐方法是什么?

时间:2012-04-26 20:56:30

标签: c# xamarin.ios

我正在寻找一种方法来为每个Console.Write [Line]插入前缀(日期和时间)。我正在寻找一种推荐的方法,就像改变输出的推荐方法是使用Console.SetOut

我很清楚我可以做String.Format(“{0} {1}”,DateTime.Now,msg),但我试图将其作为我的最后手段。

问题是输出在运行时是可更改的,默认值已经附加了当前时间。如果我将其附加到我的代码上,我将复制日期。

有这样的事吗?我正在使用Monotouch,因此我只能使用为其编译的库。

2 个答案:

答案 0 :(得分:14)

您需要System.IO.TextWrite inherit,提供Encoding并覆盖例如WriteLine WriteConsole.Out。在使用Console.setOut(x)进行更改之前,请存储原始class PrefixedWriter : TextWriter { private TextWriter originalOut; public PrefixedWriter() { originalOut = Console.Out; } public override Encoding Encoding { get { return new System.Text.ASCIIEncoding(); } } public override void WriteLine(string message) { originalOut.WriteLine(String.Format("{0} {1}", DateTime.Now, message)); } public override void Write(string message) { originalOut.Write(String.Format("{0} {1}", DateTime.Now, message)); } } class Program { static void Main(string[] args) { Console.SetOut(new PrefixedWriter()); Console.WriteLine("test 1 2 3"); Console.ReadKey(); } }

这是一个完整的代码示例:

{{1}}

答案 1 :(得分:9)

您只需将Console调用替换为您自己的类。

class MyConsole
{
   public static void WriteLine(string msg)
   {
      Console.Write(String.Format("{0} {1}", DateTime.Now, msg));
   }
}

当然,对Console.Write的所有来电都会变成MyConsole.Write

您还可以更进一步,在所有代码文件中使用Console替换MyConsole ...

using Console = MyNamespace.MyConsole;