List的Remove方法是否配置对象元素?

时间:2019-04-24 15:17:19

标签: c#

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

在我的代码中,我具有计时器的列表类型

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(),我应该在哪里调用它?

1 个答案:

答案 0 :(得分:2)

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

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

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