首页 新闻 会员 周边

IEnumerable和List有什么区别

0
[已解决问题] 解决于 2015-07-08 11:51

在VS里面写代码的时候会遇到VS的推荐 例如

List<User> 会提示转换为 IEnumerable<User>   

不知道两者之间有什么区别 求解!

天地盟主的主页 天地盟主 | 菜鸟二级 | 园豆:251
提问于:2015-07-08 10:54
< >
分享
最佳答案
0

resharper会提示,实际上用IEnumerable<User> 还是比较好的.

IEnumerable<T> 是一个接口,他定义了一个可被枚举对象(包括的实际实现很多),

List<T>是一个泛型集合类的实现,他实现了上面的接口,所以也是可枚举的.

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2015-07-08 11:14

能举个例子么

天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:20

@天地盟主: 什么例子...其实看你平时用linq2obj不,用的话你自然就会用IEnumerable<T> 

用的少的话,就无所谓.

而且这个没什么好纠结的,你可以理解成IEnumerable<T>是List的子集,如果你只需要可以枚举的数组,就用IEnumerable<T>,如果你需要对数组做增删改,就用list

 

吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-08 11:31

@吴瑞祥: 原来是这样 那我懂了 如果是做增删改的话 还是list好 如果只是读取的话 IEnumerable<T> 用这个比较靠谱  谢谢您的回复

天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:45
其他回答(4)
1

https://msdn.microsoft.com/zh-cn/library/6sh2ey19(v=vs.110).aspx

注意看语法部分。

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2015-07-08 11:00

莫非所有的继承 都推荐用父类?

支持(0) 反对(0) 天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:18

@天地盟主: 使用List<T>还是IEnumerable<T>,其实是规范问题。微软推荐是发现该处对象其实只利用了List<T>的IEnumerable<T>接口,因此直接表示为IEnumerable<T>对象更符合规范。

支持(0) 反对(0) 飞扬的尘埃 | 园豆:1318 (小虾三级) | 2015-07-08 11:23

@天地盟主: 另,这里是接口,不是父类。

支持(0) 反对(0) 飞扬的尘埃 | 园豆:1318 (小虾三级) | 2015-07-08 11:24

@飞扬的尘埃: 嗯 明白了  谢谢您的回复

支持(0) 反对(0) 天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:44
0

我的理解,IEnumerable<T>是接口类型的,不能被实例化,List<T>是IEnumerable<T>的实现,大概就是这样。可以参考MSDN文档,IEnumerable<T>List<T> 。另外你是在开启Resharper的情况下遇到这个推荐的么?

jackccc | 园豆:1341 (小虾三级) | 2015-07-08 11:06

嗯 是的 我装了 Resharper

支持(0) 反对(0) 天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:19
0

很重要的一点,List<T>是可以的,有Add Remove等方法,IEnumerable<T>是只读的。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-08 11:16

其实我是在方法的参数上遇到的 

 

public  void GetUser(List<User>) {}

推荐写成了

public  void GetUser(IEnumerable<User> ) {}

支持(0) 反对(0) 天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:21

@天地盟主: 那要看你传入这个参数是为了干啥,是只读的,还是打算对它进行Add Remove操作。这个方法很奇怪,方法名好像是获取用户,返回值却是空。机器自然不好理解你的用途了,所以推荐了不合适的。一般作为传入参数是该用接口的,但你这里好像不一般啊。

支持(0) 反对(0) liqipeng | 园豆:1160 (小虾三级) | 2015-07-08 11:39

@liqipeng: 嗯 觉得例子 有点不恰当了 其实私有返回值的 明白了  谢谢您回复

支持(0) 反对(0) 天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:46
0

这种不用理会,该用什么就什么。

茂茂 | 园豆:2892 (老鸟四级) | 2015-07-08 11:42

嗯 我也是突然有一种好奇 

支持(0) 反对(0) 天地盟主 | 园豆:251 (菜鸟二级) | 2015-07-08 11:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册