IEnumerable接口和IEnumerable 接口

1对方答复 2013-08-09 01:33:53
一直对IEnumerable接口和IEnumerable<T>接口雾里看花,我目前的认识是,只要是能用foreach遍历的集合,都实现了IEnumerable,实现了IEnumerable接口的对象,实际上就是指的一个集合。


问题:
1:List<int>实现了IEnumerable接口吗?

2:IEnumerable<T>是IEnumerable接口的泛型版本?是泛型版本又怎么样,不是泛型版本又怎么样呢,二者有什么区别呢?

3:实现了IEnumerable接口和实现了IEnumerable<T>接口有什么不同呢?
...全文
396 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
天然小呆 2013-08-09
  • 打赏
  • 举报
回复
问题1:IList<T>继承自ICollection<T>, ICollection<T>继承自IEnumerable<T>, IEnumerable<T>继承自IEnumerable, 所以List<T>实现了IList<T>接口,也就是实现了IEnumerable接口 问题2:IEnumerable<T>是IEnumerable接口的泛型版本。使用泛型,不会强行对值类型进行装箱和拆箱, 或引用类型进行向下强制类型转换,使程序性能提高。泛型定义的变量有类型限制,所以泛型提 高了程序的类型安全。 泛型还提高了代码的重用性。 问题3:不同就是问题2的区别。
  • 打赏
  • 举报
回复
1.是,可以通过右键转到定义或F12查看类型定义 2.泛型版本是强类型(类型安全)的,并且IEnumerable<T>实现了IEnumerable 也就是说,所有IEnumerable的功能,IEnumerable<T>都具备 在写代码时会带来很多方便 3.IEnumerable是用foreach遍历充要条件,简单例子 IEnumerable<string> iEnumerable = new string[]{ }; IEnumerable enumerable = iEnumerable; 但是,如果你不知道enumerable中元素是string类型,你就只能当作object使用 foreach(object obj in enumerable) foreach(string str in iEnumerable) 可以进一步使用str的方法和属性 虽然,你的确可以写成foreach(string obj in enumerable),但是前提是你得事先知道obj的实际类型才行 例子中只是用了基础类型string,如果是一个复杂类型,使用IEnumerable将会很不方便,频繁的类型转换不仅影响性能而且容易出错 如果使用泛型,就算不小心写错了类型,编译器都可以划红线提示你,大大提高了程序的可靠性。 强类型和弱类型显著的区别 http://www.cnblogs.com/mxyu/archive/2012/05/03/2480535.html

110,539

社区成员

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

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

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