массив реализует IEnumerable <T>? - PullRequest
1 голос
/ 06 июня 2019

Я знаю, что базовый абстрактный класс Array не реализует универсальный IEnumerable как

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

, поэтому, когда я создаю класс производного массива, такой как int[] i; или string[] s;, они реализуют IEnumerable<T>?И как я могу увидеть исходный код []?

Ответы [ 3 ]

3 голосов
/ 06 июня 2019

Существует специальный тип SZArrayHelper - обертка вокруг массива.Вот исходный код: https://referencesource.microsoft.com/#mscorlib/system/array.cs,aa97964558672440

Кроме того, массив реализует IList, а также ICollection и IEnumerable.Итак, Array реализует IEnumerable

2 голосов
/ 06 июня 2019

Официальное слово здесь

Обзор массива

Массив имеет следующие свойства:

  • Массивможет быть одномерным, многомерным или зубчатым.

  • Количество измерений и длина каждого измерения определяются при создании экземпляра массива.Эти значения нельзя изменить в течение времени существования экземпляра.

  • Значения по умолчанию для элементов числового массива установлены в ноль, а для ссылочных элементов - ноль.

  • Зубчатый массив - это массив массивов, поэтому его элементы являются ссылочными типами и инициализируются нулем.

  • Массивы индексируются нулем: массив сn элементов индексируется от 0 до n-1.

  • Элементы массива могут быть любого типа, включая тип массива.

  • Типы Array - это ссылочные типы, полученные из абстрактного базового типа Array.Поскольку этот тип реализует IEnumerable и IEnumerable<T>, вы можете использовать итерацию foreach для всех массивов в C #.

1 голос
/ 06 июня 2019

Вы можете проверить это просто так:

var type = typeof(int[]); // or any other type
foreach (var @interface in type.GetInterfaces())
    Console.WriteLine(@interface);

Результат:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...