一位同事有一个对象,上面有一堆通用列表集合。列表中的每种类型都实现了给定的接口(interface)。他希望能够创建一个包含所有其他列表的列表,以便他可以遍历并调用对象实现的方法。下面是一个简单的例子。
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();
}
}
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();
}
此外,如果您确实需要维护两个单独的实现列表,然后将它们一起处理,您可以这样做:
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();
}
关于C#类型转换,如何避免报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618887/