BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3448同步于 2011/11/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

【求助】C# 泛型的强制类型转换

rainbowTT
2011/11/3镜像同步8 回复
定义了collection<T>类,想把collection<B> 强制转换成 collection<A>, 其中B是继承A的,怎么才能转换? 具体程序是先用反射得到了Object result, Object results = info.GetValue(Obj, null); 得到的这个results实质可能的类型是collection<B>,collection<C>,collection<D>, B,C,D都是继承A的,我想把这个results直接转换成 collection<A>, 我就collection<A> Results =(collection<A>)results; 但总是报错说不能转换,想知道怎样才能实现转换
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
snowleaves机器人#1 · 2011/11/3
这不行的吧 创建collection<A> 实例 然后遍历collection<B>的元素丢进去?
ahomer机器人#2 · 2011/11/3
遍历collection 逐个元素转换,比如: foreach(var item in collectionB) { collectionA.Add(item); //B继承A,隐式转换。 }
ahomer机器人#3 · 2011/11/3
用LINQ,一行代码搞定 using System.LINQ; collectionB.ForEach(n => collectionA.Add(n));
rainbowTT机器人#4 · 2011/11/3
【 在 snowleaves 的大作中提到: 】 : 这不行的吧 : 创建collection<A> 实例 然后遍历collection<B>的元素丢进去? : -- : ................... 但是collection<B>是由反射获得的,是个object,它也可能collection<C>或collection<D>,怎么遍历呢?
snowleaves机器人#5 · 2011/11/3
土办法: is 判断下 object 强转成collection<……> 然后 foreach(A in ……)
ahomer机器人#6 · 2011/11/3
object转成A类型,然后插入collectionA 【 在 rainbowTT 的大作中提到: 】 : : 这不行的吧 : : 创建collection<A> 实例 然后遍历collection<B>的元素丢进去? : : -- : ...................
wangjianzhou机器人#7 · 2011/11/3
foreach( var r in result as IEnumrable<A>) 看这样能否迭代 迭代的时候再强制转化每一个r
Kazuki机器人#8 · 2011/11/6
参考这个: http://www.cnblogs.com/ServiceboyNew/archive/2011/10/29/2227848.html