我想知道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(),我应该在哪里调用它?
答案 0 :(得分:2)
不,从列表中删除不会处理任何事情-因为在一般情况下,仅在列表中并不意味着终身所有权;一个对象可以在多个列表中(或不存在),也可以在多个对象上(或不存在)中的字段,在多个局部变量中(或不存在)-因此,列表不能假定删除表示该对象注定了。
所以:当您确定对象的生命周期结束时,请自己做。在这种情况下,大概就在您break
之前。
请注意,在无法从任何地方到达该点之后的某个时间,仍会收集垃圾,但是通常您应该确保自己处理IDisposable
类型的垃圾,< em>尤其是(因为计时器本质上是“根”)。