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

Jon*_*ski 13 c# xamarin.ios

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

我很清楚我可以做String.Format("{0} {1}",DateTime.Now,msg),但我想把它作为我的最后手段.

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

有这样的事吗?我正在使用Monotouch,所以我只能使用为它编译的库.

Chr*_*heD 15

你需要继承System.IO.TextWrite,提供Encoding了如和覆盖WriteLineWrite.Console.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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ner 9

您可以用自己的类替换Console调用.

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

当然,所有的电话都Console.Write成了MyConsole.Write.

你也可以把它更进一步,别名ConsoleMyConsole在所有的代码文件...

using Console = MyNamespace.MyConsole;
Run Code Online (Sandbox Code Playgroud)