在C#(C sharp)中数组和集合的区别及他们的初始化器

数组和List各有偏重,怎么可以厚此而薄彼。

《c#入门经典》第五章中描述了用值来初始化数组:

int[] myIntArray=new int[5] {0,1,2,3,4};

这是一种合并实例化和初始化数组的简便方式。集合初始化器只是把这个语法扩展到集合上:

List<int> myIntCollection=new List<int> {1,2,3,4,5,6,7,1};


数组是集合的一种。官方的说法是:
1.集合类定义为 System.Collections 或 System.Collections.Generic 命名空间的一部分。
2.大多数集合类都派生自 ICollection、IComparer、IEnumerable、IList、IDictionary 和 IDictionaryEnumerator 接口以及它们的等效泛型接口。

更一般的说法是:
“在 C# 中,集合类并非必须严格从 IEnumerable 和 IEnumerator 继承才能与 foreach 兼容;只要类有所需的 GetEnumerator、MoveNext、Reset 和 Current 成员,便可以与 foreach 一起使用。省略接口的好处为,使您可以将 Current 的返回类型定义得比 object 更明确,从而提供了类型安全。”