lz明明说的是2.0嘛,哪里来的Cast方法?。。。
lz可以自行编写一个Cast方法,遍历List<A>,把每个A转换成B,如
static IEnumerable<TResult> Cast<TResult>(IEnumerable source) where TResult : class
{
foreach (object o in source)
{
TResult result = o as TResult;
if (o == null)
throw new InvalidCastException("can't cast");
yield return result;
}
}
A虽然继承于B,但是List<A>与List<B>并不存在继承关系。
listB.Cast<A>().ToList()
List<B> listB as List<A> ListA
A与B不是同类的,
listB.Cast<A>().ToList()
虽然已经解决了,但,既然看到了,还是回答一下吧。
2.0是不存在Cast这个方法,因为这个是LinQ里的,但是可以自己去写这个方法。具体的写法,你可以去反编译3.0以后的这个方法。其实也很简单,就是定义了一个新的List<B>对象listB,然后,把listA里的每一个元素都填充到listB中,没有什么技巧的。
对于你提的这个问题,我猜测你的一个目的:希望listA和listB能通用,前面有朋友说明了,它们根本就是不同的一个类,没办法转换,即便通过中间对象object进行两次转换也是不成功的(目标对象会变成空)。
关于你的这个需求,可以参考我的随笔集合代理类的实现