我刚刚开始学习C#,在数组介绍中,他们展示了如何将变量建立为数组,但是似乎必须在赋值时指定数组的长度,所以如果我不知道数组的长度怎么办?数组?
Answers:
必须为数组分配一个长度。要允许任何数量的元素,请使用List
类。
例如:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
List<int[]> myInts = new List<int[]>();
可以工作。
"Arrays must be assigned a length"
-在static
之外的方法中Main()
,我进行了声明String[] tokens = null
,但没有初始化它,但是怎么能"Hello.World".Split('.')
在没有System.NullReferenceException
错误的情况下调用它呢?
使用List<>
建立一个未知的长度的“数组”。
使用List<>.ToArray()
返回真正的数组,而不是一个List
。
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
一些背景资料:
如前所述,如果您希望动态收集事物,请使用List<T>
。在内部,列表也使用数组进行存储。该数组具有固定的大小,就像其他数组一样。数组声明为具有大小后,它就不会更改。将项目添加到时List
,它会添加到数组中。最初,List
我以一个长度为16的数组开始。当您尝试将第17个项目添加到时List
,发生的事情是分配了一个新数组,(我认为)它是旧数组的两倍。 ,所以32个项目。然后,将旧数组的内容复制到新数组中。因此,尽管aList
可能对外部观察者来说是动态的,但在内部它也必须遵守规则。
就像您可能已经猜到的那样,数组的复制和分配不是免费的,因此应该以尽可能少的数组为目标,并可以指定List
数组的初始大小(在的构造函数中),在理想情况下,它足以容纳所需的一切。但是,这是微优化,不太可能对您很重要,但是知道您实际在做什么总是很高兴的。
您可以创建一个大小设置为变量的数组,即
int size = 50;
string[] words = new string[size]; // contains 50 strings
但是,如果您决定需要100个单词,则以后不能更改该大小。如果您需要大小是真正动态的,则需要使用其他类型的数据结构。尝试List
。
string[] words = new string(',', size - 1).Split(',');
立即尝试使用进行初始化""
。