I know that the base abstract Array class doesn\'t implement generic IEnumerable as
public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IS
Official word here
Array Overview
An array has the following properties:
An array can be Single-Dimensional, Multidimensional or Jagged.
The number of dimensions and the length of each dimension are established when the array instance is created. These values can't be changed during the lifetime of the instance.
The default values of numeric array elements are set to zero, and reference elements are set to null.
A jagged array is an array of arrays, and therefore its elements are reference types and are initialized to null.
Arrays are zero indexed: an array with n elements is indexed from 0 to n-1.
Array elements can be of any type, including an array type.
Array types are reference types derived from the abstract base type Array. Since this type implements
IEnumerable
andIEnumerable<T>
, you can useforeach
iteration on all arrays in C#.
You can check it simply like this:
var type = typeof(int[]); // or any other type
foreach (var @interface in type.GetInterfaces())
Console.WriteLine(@interface);
Result is:
System.ICloneable
System.Collections.IList
System.Collections.ICollection
System.Collections.IEnumerable
System.Collections.IStructuralComparable
System.Collections.IStructuralEquatable
System.Collections.Generic.IList`1[System.Int32]
System.Collections.Generic.ICollection`1[System.Int32]
System.Collections.Generic.IEnumerable`1[System.Int32]
System.Collections.Generic.IReadOnlyList`1[System.Int32]
System.Collections.Generic.IReadOnlyCollection`1[System.Int32]
There is special type SZArrayHelper
- wrapper around array. Here is source code: https://referencesource.microsoft.com/#mscorlib/system/array.cs,aa97964558672440
Also, array implements IList
, and it implements ICollection
and it implements IEnumerable
. So, Array implements IEnumerable