Domanda

I stava implementando la mia classe ArrayList ed è stato lasciato sorpreso quando ho capito che

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}

non ha funzionato. Qual è la ragione per gli array non implementano IEnumerator in .NET?

C'è un work-around?

Grazie

È stato utile?

Soluzione

Array fanno implementare IEnumerable<T>, ma è fatto come parte della conoscenza speciale CLI ha per gli array. Questo funziona come se si trattasse di un'implementazione esplicita (ma non lo è: è fatto in fase di esecuzione). Molti strumenti non mostrerà questa implementazione, questo è descritto nel Note sezione della panoramica di classe Array.

Si potrebbe aggiungere un cast:

return ((IEnumerable<T>)_array).GetEnumerator();

Nota, più vecchio MSDN (pre docs.microsoft.com) copertura di questo ha cambiato un paio di volte con diverse versioni di .NET, di controllo per il sezione Osservazioni .

Altri suggerimenti

È possibile utilizzare metodo generico IEnumerable<T> OfType<T>() da System.Linq namespace, che si estende l'interfaccia IEnumerable. Sarà filtrare tutti elementi che tipo è diverso T e IEnumerable<T> collection ritorno. Se si utilizza (IEnumerable<T>)_array operatore di conversione, potrebbe non essere sicuro, perché System.Array (e di altri tipi non generici) negozi di oggetti di tipo System.Object.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top