web-dev-qa-db-fra.com

Pourquoi les tableaux en .net implémentent-ils uniquement IEnumerable et non IEnumerable <T>?

J'implémentais ma propre classe ArrayList et j'ai été surpris quand j'ai réalisé que

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

n'a pas fonctionné. Quelle est la raison pour laquelle les tableaux n'implémentent pas IEnumerator dans .NET?

Y a-t-il une solution de contournement?

Merci

43

Les tableaux implémentent IEnumerable<T>, mais cela se fait dans le cadre des connaissances spéciales de la CLI pour les tableaux. Cela fonctionne comme s'il s'agissait d'une implémentation explicite (mais ce n'est pas le cas: cela se fait au moment de l'exécution). De nombreux outils ne montreront pas cette implémentation, cela est décrit dans la section Remarques de la vue d'ensemble de la classe Array.

Vous pouvez ajouter un casting:

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

Notez que l'ancienne couverture MSDN (pre docs.Microsoft.com) de cela a changé plusieurs fois avec différentes versions de .NET, vérifiez la section remarques .

62
Richard