我在这里使用 C# 工作,假设我有:
class A
{}
class B : A
{}
List<B> myList;
我想,在部分代码中将此 myList 转换为,List< A>,
但是当我尝试时,我得到一个错误:
List<A> myUpcastedList = (List<A>)myList; //not working
有可能吗?如果是,语法是什么?
我在这里使用 C# 工作,假设我有:
class A
{}
class B : A
{}
List<B> myList;
我想,在部分代码中将此 myList 转换为,List< A>,
但是当我尝试时,我得到一个错误:
List<A> myUpcastedList = (List<A>)myList; //not working
有可能吗?如果是,语法是什么?
List<B>
不能转换为List<A>
. 您必须创建新的List<A>
并用源commection 中的项目填充它。您可以为此使用 LINQ to Objects:
var aList= bList.Cast<A>().ToList();
您还应该阅读一些关于协变和逆变的内容,例如在Eric Lippert 的博客上
老虎列表不能用作动物列表,因为您可以将乌龟放入动物列表但不能放入老虎列表。
IEnumerable<T>
在 C# 4 和 5 中,如果您使用而不是,这是合法的,List<T>
因为没有办法将乌龟放入动物序列中。所以你可以说:
List<B> myList = new List<B>();
IEnumerable<A> myUpcastedList = myList; // legal
据我所知,这是不可能的。另一种方法是执行以下操作。
using System.Linq;
var myUpcastedList = myList.Cast<A>().ToList();
我以前可以:
List<A> myUpcastedList = myList.ToList<A>();
虽然这会生成列表的副本...不确定这是您的意图
你可以使用这个问题也许对你有用
List<A> testme = new List<B>().OfType<A>().ToList();