zoukankan      html  css  js  c++  java
  • IEnumerable和List有什么区别?(转)

    如下

    IList接口可以使用更多的方法。比如你看一个集合是否包含相应实体,IEnumerable不行,而IList里有Contains,相应的实现了IList的可以添加,删除相应实体。而IEnumerable不行。

    但是这不是说IList就比IEnumerable好,就是因为IList实现的功能多,相对来说限制大了。你看Object,任何类都可用作Object,这就是因为他简单。同理,能为IList表达的数据集,一定能为IEnumerable表达,而能为IEnumerable表达不一定能为IList表达。你可以想想Linq To Object里的方法为什么是对IEnumerable接口了而不是选择IList接口。

    性能对于我们来说不是问题,就算是问题,你问的性能是什么?是IEnumerable得到Current快还是什么的?

    那么我想说,这是接口,他本身没有实现,怎么比较性能,就算有,也是List<T>之类的类才会有的。

    public interface IEnumerable
    {
         IEnumerator GetEnumerator();
    }
    public interface IEnumerator
    {
        bool MoveNext();
        object Current { get; }
        void Reset();
    }
    public interface IList : ICollection, IEnumerable
    {
        // Methods
        int Add(object value);
        void Clear();
        bool Contains(object value);
        int IndexOf(object value);
        void Insert(int index, object value);
        void Remove(object value);
        void RemoveAt(int index); // Properties
        bool IsFixedSize { get; }
        bool IsReadOnly { get; }
        object this[int index] { get; set; }
    }

    咋一看到IEnumerable这个接口,我们可能会觉得很神奇,在一般的编程时,基本上我们是想不到去用它的,可是,俗话说得好,存在便是道理,那么,它对我们来说,能够带来哪些奇妙的事情呢?
    要想弄懂它,我们还是看看其定义吧!
    在MSDN上,是这么说的,它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代。换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历数组的通用方法,这样看来,是不是很神奇呢?
    例如:
            public static void Print(IEnumerable myList)
            {
                int i = 0;
                foreach (Object obj in myList)
                {
                    if (obj is Student)//这个是类型的判断,这里Student是一个类或结构
                    {
                        Student s=(Student)obj;
                        Console.WriteLine(" [{0}]: {1}", i++, s.Sname);
                    }
                    if (obj is int)
                    {
                        Console.WriteLine("INT:{0}",obj);
                    }
                }
                Console.WriteLine();
            }
    上面,我们可以在foreach中进行多个if判断,来进行相应的操作。
    IEnumerable 的另一个用法是在泛型中的使用。其中用lamda表达式在数组中查询,具体例子如下:
                List<string> fruits =
                    new List<string> { "apple", "passionfruit", "banana", "mango", 
                        "orange", "blueberry", "grape", "strawberry" };
               // List<string> query = fruits.Where(fruit => fruit.Length < 6).ToList();
                IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
                foreach (string fruit in query)
                    Console.WriteLine(fruit);
    以上的两个例子呢,我觉得在平时编程中,还是会经常用到的,我们不妨试试。。。
  • 相关阅读:
    挑战程序设计竞赛 dp
    算法导论 动态规划
    算法导论第二章
    divide conquer
    时间戳
    bootstrap 针对超小屏幕和中等屏幕设备定义的不同的类
    jQuery中的Ajax
    怎么判断一个变量是Null还是undefined
    认识Ajax
    关于apache
  • 原文地址:https://www.cnblogs.com/huangfenggu/p/4413753.html
Copyright © 2011-2022 走看看