小编Fla*_*980的帖子

System.Diagnostics.TraceSource中的跟踪输出格式

以下代码:

static void Main(string[] args)
{
    TraceSource ts = new TraceSource("MyApplication");

    ts.Switch = new SourceSwitch("MySwitch");
    ts.Switch.Level = SourceLevels.All;

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out));

    ts.TraceInformation("Hello World");
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

MyApplication信息:0:Hello World

跟踪输出开头的"MyApplication Information:0:"部分来自TraceSource类本身.

但是,我需要在行的开头有一个时间戳,我想将"信息"更改为"信息".

有没有办法在跟踪输出中获得更多自由,这样我可以将其配置为:

13:03:00 - MyApplication Info:Hello World

我尝试了几个小时,但没有成功.无论我做什么,在输出行的开头,始终有这个常量预定义的"MyApplication Information:0:Hello World"输出.

MSDN文档也没有透露任何有用的信息.

.net c# system.diagnostics tracesource

18
推荐指数
2
解决办法
1万
查看次数

声明抽象泛型类型变量

我的问题如下.我为一个显然不起作用的家庭项目做了代码设计.也许你可以帮我弄清楚"代码味道"来自哪里.

好吧,让我们开始:我已经定义了一些类来包装不同类型的存档类型:

public abstract class Archive { }
public class ZipArchive : Archive { }
public class TarArchive : Archive { }
Run Code Online (Sandbox Code Playgroud)

为了处理这些档案,我定义了Manager类.一个定义所需行为的抽象概念,

public abstract class ArchiveManager<T> where T : Archive
{ 
    public abstract void OpenArchive(T archive);
}
Run Code Online (Sandbox Code Playgroud)

具体实现特定的behaiour的具体的:

public class ZipArchiveManager : ArchiveManager<ZipArchive>
{
    public override void OpenArchive(ZipArchive archive) {  /* .. */ }
}

public class TarArchiveManager : ArchiveManager<TarArchive>
{
    public override void OpenArchive(TarArchive archive) {  /* .. */ }
}
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是,在编译期间,我不知道我将处理哪种档案,所以我尝试了以下方法:

class Program
{
    static void Main(string[] …
Run Code Online (Sandbox Code Playgroud)

c# generics abstract-class

5
推荐指数
1
解决办法
392
查看次数