Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Interfaccia IEnumerable

Espone un enumeratore, che supporta un'iterazione semplice su una raccolta non generica.

Spazio dei nomi:  System.Collections
Assembly:  mscorlib (in mscorlib.dll)

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

Il tipo IEnumerable espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetEnumeratorRestituisce un enumeratore che consente di scorrere una raccolta.
In alto

  NomeDescrizione
Metodo di estensione pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreAsParallelConsente la parallelizzazione di una query. (Definito da ParallelEnumerable).
Metodo di estensione pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreAsQueryableConverte un oggetto IEnumerable in un oggetto IQueryable. (Definito da Queryable).
Metodo di estensione pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreCast<TResult>Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato. (Definito da Enumerable).
Metodo di estensione pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreOfType<TResult>Filtra gli elementi di un oggetto IEnumerable in base a un tipo specificato. (Definito da Enumerable).
In alto

IEnumerable è l'interfaccia base per tutte le raccolte non generiche che possono essere enumerate. Per la versione generica di questa interfaccia, vedere System.Collections.Generic.IEnumerable<T>. IEnumerable contiene un singolo metodo, GetEnumerator, che restituisce IEnumerator. IEnumerator consente di scorrere la raccolta fornendo una proprietà Current e MoveNext e i metodi Reset.

È consigliabile implementare IEnumerable e IEnumerator sulle classi di raccolta per abilitare la sintassi foreach (For Each in Visual Basic), comunque l'implementazione di IEnumerable non è necessaria. Se la raccolta non implementa IEnumerable, è necessario seguire il modello di iteratore per supportare questa sintassi fornendo un metodo GetEnumerator che restituisce un'interfaccia, una classe o una struttura. Quando si utilizza Visual Basic, è necessario fornire un'implementazione IEnumerator, restituita da GetEnumerator. Quando si sviluppa con C# è necessario fornire una classe che contiene una proprietà Current e MoveNext e i metodi Reset descritti da IEnumerator, ma la classe non deve implementare IEnumerator.

Nell'esempio di codice seguente viene illustrata la procedura consigliata per la ripetizione della raccolta personalizzata implementando le interfacce IEnumerator e IEnumerable. In questo esempio, i membri delle interfacce non sono chiamati in modo esplicito, ma vengono implementati per supportare l'utilizzo di foreach (For Each in Visual Basic) per scorrere l'insieme.

Per un esempio che illustra come implementare l'interfaccia di IEnumerable, consultare Implementare l'interfaccia IEnumerable in una classe di raccolte


using System;
using System.Collections;

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

    public string firstName;
    public string lastName;
}

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

    IEnumerator IEnumerable.GetEnumerator()
    {
       return (IEnumerator) GetEnumerator();
    }

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

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
 *
 */


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft