这两个列表声明之间有什么区别?

时间:2015-11-04 13:30:24

标签: c# list

var mylist1 = new List<float>(5);
var mylist2 = new List<float>(new float[5]);

mylist1获得5作为容量。 mylist2也获得5分。这两者之间有什么区别,我应该使用哪一个?

2 个答案:

答案 0 :(得分:6)

第一个声明创建一个列表,其中包含一个大小为5的基础数组。

第二个声明将数据从传递的数组复制到列表中的基础数组。

所以第二个声明需要:

  • 创建一个空数组
  • 将该数组中的值复制到另一个数组

由于它也更难阅读(将空数组传递给列表构造函数的原因是什么?),根本没有任何理由可以使用第二个而不是第一个

重载的原因是允许您使用来自另一个数组或可枚举的值预填充列表。例如:

var list = new List<int>(Enumerable.Range(1, 100));

(当然,即便如此,您通常会使用Enumerable.Range(1, 100).ToList()代替:))

答案 1 :(得分:0)

第一个创建一个容量为5的List,但是如果你访问myList1 [3]则为empty.i.e,你会收到一个错误。 第二个创建一个包含5个元素的float列表。每个元素的值都是0.0,即float

的默认值