tracelistener显式在foreach循环对象中Dispose()

本文关键字:Dispose 对象 循环 foreach tracelistener | 更新日期: 2023-09-27 18:15:11

我有类似于下面的代码,我应该显式地处理下面代码中的侦听器对象吗?

。E应该这样写代码:

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

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

tracelistener显式在foreach循环对象中Dispose()

在上面的代码中,您只是访问每个TraceListener的引用并调用WriteLine()方法,在这种情况下不需要调用Dispose()

对不起,我想评论克里斯宾特的答案,但是我不能。总之,我同意ChrisBint的观点,在上述场景中不应该调用Dispose:

  1. tracelisters属于localObj,并且localObj负责控制其内部对象的生命周期。因此,第二段代码看起来很奇怪。
  2. 如果你实现localObj的getter。侦听器生成新的集合,不暴露localObj的真正内部,您不需要显式调用Dispose,它将由GarbageCollector调用。