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);
以上的兩個例子呢,我以爲在平時編程中,仍是會常常用到的,咱們不妨試試。。。
相關文章
相關標籤/搜索