System.Diagnostics.TraceListener在foreach循环对象中显式Dispose()?

时间:2011-11-18 14:21:36

标签: c# .net

我的代码类似于以下代码,我是否应该在以下代码中明确处理侦听器对象?

也就是这段代码:

foreach (System.Diagnostics.TraceListener listener in localObj.Listeners)
    listener.WriteLine("some logging");

重写为:

foreach (System.Diagnostics.TraceListener listener in localObj.Listeners)
{
    listener.WriteLine("some logging");
    listener.Dispose();
}

任何编码方式的原因都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

在上面的代码中,您只是访问每个TraceListener的引用并调用WriteLine()方法,并且在此方案中无需调用Dispose()

答案 1 :(得分:1)

很抱歉,我想对ChrisBint的答案发表评论,但我不能。简而言之,我同意ChrisBint,你不应该在上述场景中调用Dispose:

  1. TraceListeners属于localObj,localObj负责规定其inetrnal对象的生命周期。因此,第二段代码似乎很奇怪。
  2. 如果使用新集合的生成来实现localObj.Listeners的getter并且不公开localObj的真实内部,则不需要显式调用Dispose,它将由GarbageCollector调用。