Trace.WriteLineIf和Trace.Error之间的区别

时间:2011-02-25 11:54:31

标签: c# .net vb.net

我发现的大多数示例都使用了Trace.WriteLineIf,例如

       `Trace.WriteLineIf(mySwitch.TraceError,"my error");'

但使用Trace.TraceError("my error");似乎会产生相同的结果(当发送到TextWriterTraceListener时)。

这两种方法有什么区别?

提前感谢。

2 个答案:

答案 0 :(得分:3)

只有当Trace.WriteLineIf(mySwitch.TraceError,"my error");为真时,您的代码mySwitch.TraceError才会生成输出,无论Trace.TraceError("my error")

的值如何,mySwitch.TraceError都会产生输出

Trace.TraceError为每个跟踪侦听器调用TraceEvent方法,跟踪事件类型为Error并向跟踪侦听器发送消息。

Trace.WriteLineTrace.WriteLineIf 只是向跟踪侦听器发送消息。

考虑使用TraceSource。 TraceSource是升级的跟踪系统。

[编辑@Robert Snyder]

Trace仍然存在,没有标记为过时,所以我没有争论不使用它。 但是,在大型真实世界解决方案中,我更喜欢TraceSource:

  • TraceSource更多可配置,您可以更好地控制粒度/过滤(TraceSwitch,TraceListener),这在您处理多个程序集时非常有用。
  • 更容易追踪其他信息,调用堆栈,线程信息......

http://msdn.microsoft.com/en-us/magazine/cc163767.aspx

请查看John Robbins的文章了解更多详情:

答案 1 :(得分:0)

我认为这里的主要区别是如果满足任何布尔条件,Trace.writeLineIf将是正确的。

e.g。 Trace.writeLineIf(condition = True,“Condition met”)

我认为您上面描述的模式可能是对Trace.WriteLineIf的“滥用”,但我愿意以其他方式告知

请参阅Here