数组实现IEnumerable <T>吗?

时间:2019-06-06 06:32:53

标签: c# .net oop

我知道基本抽象Array类没有实现泛型IEnumerable as

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

因此,当我创建诸如int[] i;string[] s;之类的派生数组类时,它们是否实现IEnumerable<T>?怎样查看[]的源代码?

3 个答案:

答案 0 :(得分:3)

有一个特殊类型SZArrayHelper-数组包装。这是源代码:https://referencesource.microsoft.com/#mscorlib/system/array.cs,aa97964558672440

此外,数组实现IList,它实现ICollection,并且实现IEnumerable。因此,Array实现了IEnumerable

答案 1 :(得分:2)

这里的官方用语

Array Overview

  

一个数组具有以下属性:

     
      
  • 一个数组可以是一维,多维或锯齿状。

  •   
  • 创建数组实例时,将确定维数和每个维的长度。这些值不能是   在实例的生存期内发生了变化。

  •   
  • 数字数组元素的默认值设置为零,引用元素的默认值设置为null。

  •   
  • 锯齿状数组是数组的数组,因此其元素是引用类型,并且被初始化为null。

  •   
  • 数组的索引为零:具有n个元素的数组的索引从0到n-1。

  •   
  • 数组元素可以是任何类型,包括数组类型。

  •   
  • 数组类型是从抽象基本类型Array派生的引用类型。由于此类型实现了findViewByIdIEnumerable,   您可以在C#中的所有数组上使用IEnumerable<T>迭代。

  •   

答案 2 :(得分:1)

您可以像这样简单地检查它:

exportApplicationsList(): void {
        window.open('/api/applications/export');
    }

结果是:

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