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

tt_rainbow 2011-11-03 02:45:37
定义了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;

但总是报错说不能转换,想知道怎样才能实现转换
...全文
565 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tt_rainbow 2011-11-04
  • 打赏
  • 举报
回复
以上方法貌似都不能彻底解决问题,只能是用比较土的方法了,先根据可能的类型判断一下,再按ls们说的新建一个基类的collection,然后遍历元素add进去
andyalex 2011-11-03
  • 打赏
  • 举报
回复
前面的不对,不好意思,差点误了别人

List<testA> a=((IEnumerable<testA>)b).ToList();
andyalex 2011-11-03
  • 打赏
  • 举报
回复
你说的collection 是泛型集合还是 算 自定义的?
自定义的话,转不了
如果是集合类的话,

List<testB> b = new List<testB>();

List<testA> a = (List<testA>)(IEnumerable<testB>)b;
tt_rainbow 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 juliohuang 的回复:]

只有.4.0才能隐式转换。
C# code
var collection = new Collection<A>( );
foreach (var o in results)
{
collection.Add(o);
}
[/Quote]

但是results是通过反射获得的,是个object,怎么遍历呢?
ailin84 2011-11-03
  • 打赏
  • 举报
回复
where T : A

这样可以么
wanghui0380 2011-11-03
  • 打赏
  • 举报
回复

当然如果是net4,协/逆变是直接支持滴,可以直接转换

net4以下,可以cast方法,或者自己foreach转换
yyz985 2011-11-03
  • 打赏
  • 举报
回复
全部用Collection<A>;

Collection<A> lst = new Collection<A>();
lst.Add(new B());
黄亮 2011-11-03
  • 打赏
  • 举报
回复
只有.4.0才能隐式转换。
    var collection = new Collection<A>( );
foreach (var o in results)
{
collection.Add(o);
}
bdmh 2011-11-03
  • 打赏
  • 举报
回复
有个Converter<>的泛型,看看
whowhen21 2011-11-03
  • 打赏
  • 举报
回复
这个转不转不影响使用呀,照样使用A的功能啊。。。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧