does array implements IEnumerable?

2020-04-18 08:31发布

I know that the base abstract Array class doesn't implement generic IEnumerable as

public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable
{
 ...
}

so when I create a derive array class like int[] i; or string[] s;, do they implement IEnumerable<T>? And how can I see the source code of []?

标签: c# .net oop
3条回答
等我变得足够好
2楼-- · 2020-04-18 08:54

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]
查看更多
Ridiculous、
3楼-- · 2020-04-18 09:04

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

查看更多
放荡不羁爱自由
4楼-- · 2020-04-18 09:15

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 and IEnumerable<T>, you can use foreach iteration on all arrays in C#.

查看更多
登录 后发表回答