C#类型转换,如何避免错误?

Fra*_*kie 3 c# asp.net

一个同事有一个对象,上面有一堆通用的列表集合.列表中的每种类型都实现给定的接口.他希望能够创建一个包含所有其他列表的列表,这样他就可以遍历并调用对象实现的方法.下面是一个简单的例子.

 List<Dx> dxs = new List<Dx>();
 dxs.Add(new Dx());
 dxs.Add(new Dx());

 List<Proc> procs = new List<Proc>();
 procs.Add(new Proc());

 List<List<IClean>> lists = new List<List<IClean>>();
 lists.Add(procs); // Error here
 lists.Add(dxs); // Error here

 foreach (List<IClean> list in lists)
 {
     foreach (IClean i in list)
     {        
         i.Clean();
     }
 }
Run Code Online (Sandbox Code Playgroud)

Dx和Proc都实现了IClean.这是目标.这样的事情可能吗?或者,这是不好的编程?

.NET版本4.0

sco*_*ttm 9

你可以只拥有一个List<IClean>包含两种实现的单一IClean.

var list = new List<IClean>();
    list.Add(new Dx());
    list.Add(new Proc());

foreach(var clean in list)
{
   clean.Clean();
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您确实需要维护两个单独的实现列表然后一起处理它们,您可以执行以下操作:

var dx = new List<Dx>();
var proc = new List<Proc>();

List<IClean> list = new List<IClean>();
list.AddRange(dx);
list.AddRange(proc);

foreach(var clean in list)
{
   clean.Clean();
}
Run Code Online (Sandbox Code Playgroud)