我不能分享我的代码,基本上我有一个类实现接口,如下所示:
public interface A
{
void doA();
}
public class B: A
{
public void doA()
{
// Doing A
}
}
我有一个像这样的 A 列表:
List<B> list = new List<B>();
list.Add(new B());
现在我想要一个IEnumerable<A>
。所以我尝试了这 3 行:
List<A> listCast = (List<A>)list;
IEnumerable<A> listCastToEnumerable = (IEnumerable<A>)list;
IEnumerable<A> listCastExt = list.Cast<A>();
- 第一个有错误:
“错误 1 无法将类型转换
'System.Collections.Generic.List<WindowsFormsApplication1.B>'
为'System.Collections.Generic.List<WindowsFormsApplication1.A>'
”。
第二个没有出错,但得到了
InvalidCastException
.第三个起作用了。
我的问题是:
- 为什么第一行有错误,而第二行没有?
- 为什么前两行无效?
- 进行这种演员阵容的最佳方法是什么?第三行是否有好处或有更好的方法