Question

J'exécutait ma propre classe ArrayList et a été laissé surpris quand je me suis aperçu que

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

ne fonctionne pas. Quelle est la raison des réseaux ne mettent pas en œuvre IEnumerator dans .NET?

Y at-il travail autour?

Merci

Était-ce utile?

La solution

Les tableaux Ænglisc IEnumerable<T>, mais il se fait dans le cadre de la connaissance spéciale de la CLI a pour les tableaux. Cela fonctionne comme si elle était une mise en œuvre explicite (mais n'est pas: il est fait lors de l'exécution). De nombreux outils ne montreront pas cette mise en œuvre, cela est décrit dans la section Remarques section de la vue d'ensemble de la classe Array.

Vous pouvez ajouter un casting:

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

Remarque, la couverture MSDN (pré docs.microsoft.com) plus de cela a changé plusieurs fois avec différentes versions de .NET, vérifiez les points section de remarques.

Autres conseils

Vous pouvez utiliser la méthode IEnumerable<T> OfType<T>() générique de l'espace de noms System.Linq, qui étend l'interface IEnumerable. Il va filtrer tous les éléments type est différent de T et IEnumerable<T> collection de retour. Si vous utilisez l'opérateur de conversion de (IEnumerable<T>)_array, il pourrait ne pas être en sécurité, parce que System.Array (et d'autres types non génériques) les éléments de type magasins System.Object.

scroll top