c# – 将对象列表转换为接口列表

如果我有objectA实现ISomeInterface

为什么我不能这样做?

List<objectA> list = (some list of objectAs . . .)

List<ISomeInterface> interfaceList = new List<ISomeInterface>(list);

为什么我不能将列表粘贴到interfaceList构造函数中?有解决办法吗?

最佳答案
在C#3.0 .Net 3.5及以上,您可以通过执行以下操作来解决此问题

List<ISomeInterface> interfaceList = new List<ISomeInterface>(list.Cast<ISomeInterface>());

为什么不起作用的原因是List< ISomeInterface>的构造函数在这种情况下需要一个IEnumerable< ISomeInterface&gt ;.列表变量的类型只能转换为IEnumerable< objectA>.即使objectA可以转换为ISomeInterface,类型为IEnumerable< objectA>不能转换为IEnumerable< ISomeInterface&gt ;. 虽然在C#4.0中也会发生变化,它为该语言添加了Co和Contravariance支持,并允许进行此类转换.

转载注明原文:c# – 将对象列表转换为接口列表 - 代码日志