c#中的IEnumerable ,ICollection,IList,IQueryable, List 你真的懂了吗?

IEnumerable vs ICollection vs IList vs IQueryable in C#

IEnumerable

Namespace: System.Collections

  • 最基本的列表容器,连列表项Count都不能获取
  • 允许遍历, 但不允许添加、删除、更新列表项
  • 支持使用where linq查询

ICollection

Namespace: System.Collections

  • IEnumerable 的扩展,增加了添加、删除、更新等操作
  • 可以获取列表项Count, 获得Count的算法复杂度为O(1)
  • 支持遍历、where等所有linq查询

IList

Namespace: System.Collections

  • ICollection 的扩展,支持IEnumerable 和ICollection的所有操作
  • 支持更多列表项操作,如列表中插入和删除元素
  • This is the only interface in the System.Collection that contains all functionality of IEnumerable and ICollection and additional functionality.

IQueryable

Namespace: System.Linq

  • 支持LINQ to SQL表达式查询,作用于数据库级别
  • 示例:var wantedP = from p in Parts where p.CanOperate==true select p;

List / List<T>

Namespace: System.Collections / System.Collections.Generic;

  • List是IList, ICollection, IEnumerable的实现类。具有c#列表类所有操作能力。
  • 如果我们设计一个类并想把它暴露出去,最好暴露接口而不是具体的实现类。

Conclusion

  • 如果你只是简单的写一个功能类,此类不对外提供任何服务,那使用List没什么问题
  • 如果你的类要对外提供服务,最好对外暴露接口,让用户自己选择合适的实现类。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一 很是赞同韩寒说过的一句略带戏谑的话:“你连世界都没观过,何来世界观?”这句话也很大程度上促成了我的此次美国之行...
    LawXu徐晟磊阅读 1,646评论 2 4
  • 这几天就想着吃川味面条“来一碗”,嫌远又懒得去,网上找找自制一碗,味道真好,周末做给家人吃。 继续听书,练字,瑜伽...
    AJosie阅读 132评论 0 2
  • 是欲望和激情,而非克制和自律,产生了创造力。 不要追求,也不要压抑,只需要发展好自己,生长是一种舒展状态。
    咸叔说阅读 196评论 0 3
  • 取证类题目 在CTF中,取证赛题包括了文件分析、隐写、内存镜像分析和流量抓包分析。任何要求检查一个静态数据文件(与...
    查无此人asdasd阅读 1,496评论 0 2
  • 一波欧美写实纹身正在来袭.... 喜欢纹身,以及喜欢欧美风格的不要错过哦
    成都纹身师杰子阅读 4,478评论 1 0

友情链接更多精彩内容