如何从List <object> </object>中处理类对象

时间:2014-10-30 12:50:18

标签: c# .net object garbage-collection dispose

我有一个包含3个项目的列表框,其中一次只能选择1个项目。这些项目的属性可以从不同的类 - Alto,Zen,Esteem访问。我一次只需要使用1个班级。 我将这些类存储在列表数组中。我如何处理我想要的课程(根据我的逻辑)?

类数组列表

List<object> lst = new List<object>();

将每个类对象添加到列表

Alto objAlto = new Alto();
Zen objZen = new Zen();
Esteem objEsteem = new Esteem();

lst.Add(objAlto);
lst.Add(objZen);
lst.Add(objEsteem);

我的处理逻辑

enter image description here

现在我的问题是,我该如何处理这些物品?为什么我无法得到&#34;。置身&#34;?我是否错过任何隐式转换以利用此功能?

2 个答案:

答案 0 :(得分:1)

要添加到D Stanleys的答案,那么:

foreach(var o in lst.OfType<IDisposable>())
{
   o.Dispose();
}

答案 1 :(得分:0)

  

为什么我无法获得“.Dispose”?

Becasue yout list是tyoe List,DisposeIDisposable接口的方法。如果您的列表属于IDisposable类型(或某种类型实现IDisposable),那么您可以直接致电Dispose

我是否错过任何隐式转换以利用此功能?

没有隐式转换,但如果对象实现IDisposable,您可以显式转换它们:

foreach(object o in lst)
{
   if(o is IDisposable)
      ((IDisposable)o).Dispose();
}

然而,我看到了一些设计奇怪的事情:

  • 对象列表通常是代码气味。如果对象都实现了公共接口或具有公共基类(除了Object之外),那么最好使用更具体类型的列表。
  • 通常创建的任何对象都负责处理它。另一种方法是制作包含对象实现IDisposable的任何内容。