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

标签 c# asp.net

一位同事有一个对象,上面有一堆通用列表集合。列表中的每种类型都实现了给定的接口(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/

相关文章:

jquery - 将所有文本框集成到一个 `KeyUp` 事件中

c# - 在 .NET 中复制 DebugView 的功能 - 全局 Win32 调试 Hook ?

c# - 设置 AssemblyInfo.cs 的默认值

c# - 通过GroupBy求Max值抛出Sequence不包含元素异常

c# - 我们应该对 HtmlString 使用编码吗?

c# - 在 C# 中转换 "div"

asp.net - 页面回发后如何循环转发器数据项

c# - 如何判断对象是否继承自抽象泛型类

c# - 允许在正则表达式中使用希伯来字母

c# - 不使用 System.Net.Sockets 时出现套接字错误