IEnumerable和List有什么区别?(转)

以下编程

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

可是这不是说IList就比IEnumerable好,就是由于IList实现的功能多,相对来讲限制大了。你看Object,任何类均可用做Object,这就是由于他简单。同理,能为IList表达的数据集,必定能为IEnumerable表达,而能为IEnumerable表达不必定能为IList表达。你能够想一想Linq To Object里的方法为何是对IEnumerable接口了而不是选择IList接口。app

性能对于咱们来讲不是问题,就算是问题,你问的性能是什么?是IEnumerable获得Current快仍是什么的?性能

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

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; }
}this

 

 

 

 

 

 

 

 

 

咋一看到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("\t[{0}]:\t{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);
以上的两个例子呢,我以为在平时编程中,仍是会常常用到的,咱们不妨试试。。。
相关文章
相关标签/搜索