zoukankan      html  css  js  c++  java
  • C#中IEnumerable、ICollection、IList、List之间的区别

    首先我看看 IEnumerable:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // 摘要:
      //   公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。
      //
      // 类型参数:
      //  T:
      //   要枚举的对象的类型。
      [TypeDependency("System.SZArrayHelper")]
      public interface IEnumerable<out T> : IEnumerable
      {
        // 摘要:
        //   返回一个循环访问集合的枚举器。
        //
        // 返回结果:
        //   可用于循环访问集合的 System.Collections.Generic.IEnumerator<T>。
        IEnumerator<T> GetEnumerator();
      }

    IEnumerable<T> 实现IEnumerable接口方法,那IEnumberable做什么的,其实就提高可以循环访问的集合。说白了就是一个迭代。

    再来看看ICollection:

    1
    2
    3
    4
    5
    6
    7
    8
    // 摘要:
     //   定义操作泛型集合的方法。
     //
     // 类型参数:
     //  T:
     //   集合中元素的类型。
     [TypeDependency("System.SZArrayHelper")]
     public interface ICollection<T> : IEnumerable<T>, IEnumerable

    原来ICollection<T> 同时继承IEnumerable<T>和IEnumerable两个接口,按我的理解就是,ICollection继续它们2个接口而且扩展了方法,功能强多了。
    由原来的步枪变成半自动步枪

    我们继续看IList:

    1
    public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

    靠 IList 继承它们三个接口,怪不得功能这么多啊,那应该属于全自动步枪了

    最后来看看List:

    1
    public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

    这个时候大家仔细看看,它们都是接口,只有List 是类,不仅实现它们的接口,而且还扩展了太多的方法给我利用。哇靠,几乎所有功能都能实现了,简直是激光步枪

    按照功能排序:List<T> 《IList<T> 《ICollection<T>《IEnumerable<T>

    按照性能排序:IEnumerable<T>《ICollection<T>《IList<T>《List<T>

  • 相关阅读:
    给linux用户分配docker权限
    alpine安装docker
    linux开机自启动配置
    virtualbox vdi硬盘扩容
    树莓派更新软件源的脚本
    原生js选中下拉框中指定值
    linux环境tomcat开启远程调试
    Vue2 和 Yii2 进行前后端分离开发学习
    httpd.conf文件中找不到Deny from all这句,怎么配置多站点
    yii2.0 advanced 学习教程
  • 原文地址:https://www.cnblogs.com/0to9/p/6359887.html
Copyright © 2011-2022 走看看