C#中未知长度的数组

我刚刚开始学习C#,并在数组的介绍中,他们展示了如何build立一个variables作为一个数组,但似乎是必须指定在赋值数组的长度,所以如果我不知道的长度arrays?

数组必须分配一个长度。 要允许任何数量的元素,请使用List类。

例如:

 List<int> myInts = new List<int>(); myInts.Add(5); myInts.Add(10); myInts.Add(11); myInts.Count // = 3 

使用List<>来build立一个未知长度的“数组”。

使用List<>.ToArray()返回一个真实的数组,而不是一个List

 var list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); var array = list.ToArray(); 

您可以创build一个大小设置为一个variables的数组,即

 int size = 50; string[] words = new string[size]; // contains 50 strings 

但是,如果您决定需要100个单词,那么这个大小不能改变。 如果您需要的大小是真正dynamic的,您将需要使用不同的数据结构。 尝试List

一点背景资料:

如上所述,如果你想有一个dynamic的东西集合,使用List<T> 。 在内部,List也使用数组来存储。 该数组具有与其他数组一样的固定大小。 一旦数组被声明为具有大小,它不会改变。 将项目添加到List ,将其添加到数组中。 最初, List开始与我相信有一个16长度的数组。当您尝试将第17项添加到List ,会发生什么是一个新的数组分配,这是(我认为)两倍的大小老一个,那么32个项目。 然后将旧数组的内容复制到新数组中。 所以虽然List对外部观察者来说可能是dynamic的,但是在内部它也必须遵守规则。

正如你可能已经猜到的那样,数组的拷贝和分配并不是免费的,所以应该尽可能less地使用这些数组,并且可以指定(在List的构造函数中)数组的初始大小,在一个完美的场景中,它足以容纳你想要的一切。 然而,这是微观优化,对你来说不太可能是重要的,但总是很高兴知道你在做什么。

如果你的数据是唯一的,你可能也想看看Dictionarys,这会给你两列。

用户名,总帐单

它给你很多内置的工具来search和更新值。

如果在.NET 1.x中使用ArrayList ,或者在.NET 2.0或3.x中使用List<yourtype>

System.CollectionsSystem.Collections.Genericssearch它们。

 var yummy = new List<string>(); while(person.FeelsHappy()) { yummy.Add(person.GetNewFavoriteFood()); } Console.WriteLine("Sweet! I have a list of size {0}.", list.Count); Console.WriteLine("I didn't even need to know how big to make it " + "until I finished making it!"); 

尝试一个通用列表,而不是数组

简而言之,请使用Collections和Generics。

对任何C#开发人员来说都是必须的,值得花时间去学习:)

如上所述,通用List <>是最好的方法。

如果你被困在.NET 1. *中,那么你将不得不使用ArrayList类。 这没有编译时types检查,你也必须添加铸造 – 凌乱。

连续版本也实现了各种变体 – 包括线程安全变体。