一个同事有一个对象,上面有一堆通用的列表集合.列表中的每种类型都实现给定的接口.他希望能够创建一个包含所有其他列表的列表,这样他就可以遍历并调用对象实现的方法.下面是一个简单的例子.
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
你可以只拥有一个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)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |