【问题标题】:Does Remove method of List dispose object element? [duplicate]List 的 Remove 方法是否处理对象元素? [复制]
【发布时间】:2019-04-24 23:21:18
【问题描述】:

我想知道 List dispose(destruct) 元素的 Remove() 方法是否?

在我的代码中,我有一个 List 类型的 Timer

List<Timer> timerlist;


Timer t = new Timer();
t.Tag = ApptNo.ToString();
t.Interval = ApptInterval * 1000;
t.Tick += tm_Tick;
timerlist.Add(t);
t.Enabled = true;
t.Start();


foreach (Timer t in timerlist)
{
    if (string.Equals(t.Tag, ApptNo.ToString()))
    {
        t.Stop();
        timerlist.Remove(t);
        break;
    }
}

我的问题是我应该手动处置计时器对象 t 还是从 timerlist.Remove(t) 自动处置。 如果应该调用 t.Dispose(),我应该在哪里调用它?

【问题讨论】:

标签: c#


【解决方案1】:

不,从列表中删除不会处理任何事情 - 因为在一般情况下,仅仅在列表中并不意味着 终身所有权;一个对象可以在 多个 列表中(或无),作为多个对象上的字段(或无),以及多个局部变量(或无) - 因此列表不能假定删除意味着该对象注定要失败。

所以:当你确定对象的生命周期结束时,你自己去做。在这种情况下,大概就在你之前break

请注意,在从任何地方都无法到达的点之后的某个时间,它仍然会被垃圾收集,但通常您应该确保自己处理IDisposable 类型,特别是对于计时器(因为计时器本质上是“根”)。

【讨论】:

  • 感谢您的详细回答。我可以通过你的回答弄清楚
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2011-06-12
  • 2010-09-12
  • 1970-01-01
  • 2013-01-23
  • 2020-01-21
  • 1970-01-01
相关资源
最近更新 更多