在VS里面写代码的时候会遇到VS的推荐 例如
List<User> 会提示转换为 IEnumerable<User>
不知道两者之间有什么区别 求解!
resharper会提示,实际上用IEnumerable<User> 还是比较好的.
IEnumerable<T> 是一个接口,他定义了一个可被枚举对象(包括的实际实现很多),
List<T>是一个泛型集合类的实现,他实现了上面的接口,所以也是可枚举的.
能举个例子么
@天地盟主: 什么例子...其实看你平时用linq2obj不,用的话你自然就会用IEnumerable<T>
用的少的话,就无所谓.
而且这个没什么好纠结的,你可以理解成IEnumerable<T>是List的子集,如果你只需要可以枚举的数组,就用IEnumerable<T>,如果你需要对数组做增删改,就用list
@吴瑞祥: 原来是这样 那我懂了 如果是做增删改的话 还是list好 如果只是读取的话 IEnumerable<T> 用这个比较靠谱 谢谢您的回复
https://msdn.microsoft.com/zh-cn/library/6sh2ey19(v=vs.110).aspx
注意看语法部分。
莫非所有的继承 都推荐用父类?
@天地盟主: 使用List<T>还是IEnumerable<T>,其实是规范问题。微软推荐是发现该处对象其实只利用了List<T>的IEnumerable<T>接口,因此直接表示为IEnumerable<T>对象更符合规范。
@天地盟主: 另,这里是接口,不是父类。
@飞扬的尘埃: 嗯 明白了 谢谢您的回复
我的理解,IEnumerable<T>是接口类型的,不能被实例化,List<T>是IEnumerable<T>的实现,大概就是这样。可以参考MSDN文档,IEnumerable<T>,List<T> 。另外你是在开启Resharper的情况下遇到这个推荐的么?
嗯 是的 我装了 Resharper
很重要的一点,List<T>是可以的,有Add Remove等方法,IEnumerable<T>是只读的。
其实我是在方法的参数上遇到的
public void GetUser(List<User>) {}
推荐写成了
public void GetUser(IEnumerable<User> ) {}
@天地盟主: 那要看你传入这个参数是为了干啥,是只读的,还是打算对它进行Add Remove操作。这个方法很奇怪,方法名好像是获取用户,返回值却是空。机器自然不好理解你的用途了,所以推荐了不合适的。一般作为传入参数是该用接口的,但你这里好像不一般啊。
@liqipeng: 嗯 觉得例子 有点不恰当了 其实私有返回值的 明白了 谢谢您回复
这种不用理会,该用什么就什么。
嗯 我也是突然有一种好奇