本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

IEnumerable 介面

 

公開能逐一查看非泛型集合內容一次的列舉程式。

若要瀏覽此類型的.NET Framework 原始程式碼,請參閱Reference Source

命名空間:   System.Collections
組件:  mscorlib (於 mscorlib.dll)

[GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
[ComVisibleAttribute(true)]
public interface IEnumerable

名稱描述
System_CAPS_pubmethodGetEnumerator()

傳回逐一查看集合的列舉值。

名稱描述
System_CAPS_pubmethodAsParallel()

多載。啟用查詢的平行化作業。(由 ParallelEnumerable 定義。)

System_CAPS_pubmethodAsQueryable()

多載。將轉換 IEnumerableIQueryable(由 Queryable 定義。)

System_CAPS_pubmethodCast<TResult>()

將轉換的項目 IEnumerable 指定的型別。(由 Enumerable 定義。)

System_CAPS_pubmethodOfType<TResult>()

篩選的項目 IEnumerable 根據指定的型別。(由 Enumerable 定義。)

System_CAPS_note注意

若要檢視此類型的.NET Framework 原始程式碼,請參閱Reference Source 您可以瀏覽原始碼、 下載的參考,離線檢視,並逐步執行原始程式碼 (包含修補程式和更新),在偵錯;see instructions.

IEnumerable是可列舉的所有非泛型集合的基底介面。 這個介面的泛型版本,請參閱System.Collections.Generic.IEnumerable<T> IEnumerable包含單一方法GetEnumerator,它會傳回IEnumerator IEnumerator可讓您逐一查看集合的公開Current屬性和MoveNextReset方法。

若要實作的最佳作法是IEnumerableIEnumerator上集合類別,以便讓foreach(For Each在 Visual Basic 中) 語法,但是實作IEnumerable就不需要。 如果您的集合不實作IEnumerable,您仍然必須遵循以支援此語法所提供的迭代器模式GetEnumerator傳回的介面、 類別或結構的方法。 當使用 Visual Basic,您必須提供IEnumerator實作,其由GetEnumerator 使用 C# 開發必須時提供類別,其中包含Current屬性,以及MoveNextReset所述的方法IEnumerator,但類別沒有實作IEnumerator

下列程式碼範例示範如何逐一查看所實作的自訂集合的最佳做法IEnumerableIEnumerator介面。 在此範例中,這些介面的成員不會明確呼叫,但都實作,以支援使用foreach(For Each在 Visual Basic 中) 來逐一查看集合。 這個範例是完整的主控台應用程式。 若要編譯 Visual Basic 應用程式,變更啟始物件Sub Main在專案的屬性頁面。

如需範例,示範如何實作IEnumerable介面,請參閱Implementing the IEnumerable Interface in a Collection Class

using System;
using System.Collections;

// Simple business object.
public class Person
{
    public Person(string fName, string lName)
    {
        this.firstName = fName;
        this.lastName = lName;
    }

    public string firstName;
    public string lastName;
}

// Collection of Person objects. This class
// implements IEnumerable so that it can be used
// with ForEach syntax.
public class People : IEnumerable
{
    private Person[] _people;
    public People(Person[] pArray)
    {
        _people = new Person[pArray.Length];

        for (int i = 0; i < pArray.Length; i++)
        {
            _people[i] = pArray[i];
        }
    }

// Implementation for the GetEnumerator method.
    IEnumerator IEnumerable.GetEnumerator()
    {
       return (IEnumerator) GetEnumerator();
    }

    public PeopleEnum GetEnumerator()
    {
        return new PeopleEnum(_people);
    }
}

// When you implement IEnumerable, you must also implement IEnumerator.
public class PeopleEnum : IEnumerator
{
    public Person[] _people;

    // Enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;

    public PeopleEnum(Person[] list)
    {
        _people = list;
    }

    public bool MoveNext()
    {
        position++;
        return (position < _people.Length);
    }

    public void Reset()
    {
        position = -1;
    }

    object IEnumerator.Current
    {
        get
        {
            return Current;
        }
    }

    public Person Current
    {
        get
        {
            try
            {
                return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}

class App
{
    static void Main()
    {
        Person[] peopleArray = new Person[3]
        {
            new Person("John", "Smith"),
            new Person("Jim", "Johnson"),
            new Person("Sue", "Rabon"),
        };

        People peopleList = new People(peopleArray);
        foreach (Person p in peopleList)
            Console.WriteLine(p.firstName + " " + p.lastName);

    }
}

/* This code produces output similar to the following:
 *
 * John Smith
 * Jim Johnson
 * Sue Rabon
 *
 */

通用 Windows 平台
自 8 起供應
.NET Framework
自 1.1 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 2.0 起供應
Windows Phone Silverlight
自 7.0 起供應
Windows Phone
自 8.1 起供應
回到頁首
顯示: