关于泛型集合中的协变和逆变!

如一宝宝 2013-02-26 08:39:17

IEnumerable<BaseModel> s1 = new List<CommodityModel>();
IEnumerator<BaseModel> s2 = new List<CommodityModel>();

CommodityModel是BaseModel派生类,为何第二行代码编译不通过.第一行却可以?
...全文
188 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
如一宝宝 2013-02-26
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
跟什么协变和逆变没关系,因为List集成了IEnumerable接口而没有集成IEnumerator接口,所以List能转成 IEnumerable不能转成IEnumerator,跟你的类没关系 你看int型的List转,第二行转IEnumerator 也是不行的 IEnumerable x1 = new List<int>(); IEnumerator ……
呵呵,我糊涂了,多谢解答。
devmiao 2013-02-26
  • 打赏
  • 举报
回复
IEnumerator<BaseModel> s2 = new List<CommodityModel>().GetEnumerator();
gxingmin 2013-02-26
  • 打赏
  • 举报
回复
1楼里的“继承”写成“集成”了
gxingmin 2013-02-26
  • 打赏
  • 举报
回复
跟什么协变和逆变没关系,因为List集成了IEnumerable接口而没有集成IEnumerator接口,所以List能转成 IEnumerable不能转成IEnumerator,跟你的类没关系 你看int型的List转,第二行转IEnumerator 也是不行的 IEnumerable x1 = new List<int>(); IEnumerator x2 = new List<int>();

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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