C# 什么';这是推荐的控制台前缀方式。写入?

C# 什么';这是推荐的控制台前缀方式。写入?,c#,xamarin.ios,C#,Xamarin.ios,我正在寻找一种向每个控制台插入前缀(日期和时间)的方法。我正在寻找一种推荐的方法,就像更改输出的推荐方法是使用 我很清楚,我可以使用String.Format(“{0}{1}”),DateTime.Now,msg),但我正试图将其作为我的最后手段 问题是输出在运行时是可变的,而默认输出已经附加了当前时间。如果我在代码中附加它,我将复制日期 有这样的事吗?我使用的是Monotouch,所以我只能使用为它编译的库。您可以用自己的类替换控制台调用 class MyConsole { public

我正在寻找一种向每个控制台插入前缀(日期和时间)的方法。我正在寻找一种推荐的方法,就像更改输出的推荐方法是使用

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

问题是输出在运行时是可变的,而默认输出已经附加了当前时间。如果我在代码中附加它,我将复制日期


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

您可以用自己的类替换控制台调用

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;
您需要从
System.IO.TextWrite
,提供
编码
和重写,例如
WriteLine
Write
。在使用
Console.setOut(x)
进行更改之前,存储原始的
Console.Out

下面是一个完整的代码示例:

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();
    }
}

这正是我现在正在做的。我想知道是否有一种方法可以插入到当前的体系结构虽然这个解决方案可以工作,但在使用原始控制台输出时它不会处理双重日期。这是最好的方法。MonoTouch 5.3+重定向
控制台。将*
写入
NSLog
以绕过苹果在iOS 5.1中添加的标准输出限制。源代码的初步版本可以在我的博客上找到:喜欢它如何很好地集成并解决问题中提到的双日期问题