我刚刚开始学习C#,在数组的介绍中,他们展示了如何将变量建立为数组,但似乎必须在赋值时指定数组的长度,那么如果我不知道数组的长度呢?阵列?
必须为数组指定长度.要允许任意数量的元素,请使用List
该类.
例如:
ListmyInts = new List (); myInts.Add(5); myInts.Add(10); myInts.Add(11); myInts.Count // = 3
使用List<>
建立一个未知的长度的"数组".
使用List<>.ToArray()
返回真正的数组,而不是一个List
.
var list = new List(); list.Add(1); list.Add(2); list.Add(3); var array = list.ToArray();
一点背景资料:
如上所述,如果你想拥有一个动态的东西集合,请使用List
.在内部,List也使用数组进行存储.该数组具有固定大小,就像任何其他数组一样.一旦数组被声明为具有大小,它就不会改变.将项添加到a时List
,会将其添加到数组中.最初,我List
开始使用一个我认为长度为16的数组.当你尝试添加第17个项目时List
,会发生什么是分配一个新数组,这是(我认为)两倍于旧数组的大小. ,所以32项.然后将旧数组的内容复制到新数组中.因此,虽然a List
对于外部观察者来说可能看起来很动态,但在内部它也必须遵守规则.
正如您可能已经猜到的那样,数组的复制和分配并不是免费的,因此应该尽可能少地使用这些List
数组,并且可以指定(在构造函数中)数组的初始大小,在一个完美的场景中,它足以容纳你想要的一切.然而,这是微观优化,它不太可能对你有用,但知道你实际在做什么总是很好.
您可以创建一个大小设置为变量的数组,即
int size = 50; string[] words = new string[size]; // contains 50 strings
但是,如果您决定需要100个单词,那么这个大小以后就无法改变.如果您需要大小非常动态,则需要使用不同类型的数据结构.试试List
.