C#中的任意大小的字符串数组

时间:2010-02-25 14:31:25

标签: c# arrays string

我想定义一个字符串数组,但我不知道我需要存储在其中的字符串数量。我可以定义这样的数组吗?如何在其中插入字符串?

6 个答案:

答案 0 :(得分:9)

更好地使用这样的列表:

List<string> names = new List<string>();
names.Add(name); ///whatever string you want to insert

稍后如果您需要一系列名称,请致电:

string[] arr = names.ToArray();

如果必须使用字符串数组,那么您应该事先知道大小。如果你不知道大小,那么你可以初始化一些默认长度的数组(比如10)。 你要做的事情是:

  • 保留已添加到数组
  • 中的字符串数
  • 如果达到默认长度,则重新初始化具有更大长度的数组(例如15)并将所有现有字符串复制到此新数组。
  • 您必须检查此数组的边界,您不想从尚未使用的索引中读取(即,如果索引大于计数)

所以最好使用list而不是自己做所有这些事情

答案 1 :(得分:6)

您可以使用List<string>,这会在您向其添加项目时展开。

List<string> myList = new List<string>();
myList.Add("string1");
myList.Add("string2");

如果需要,可以很容易地将其转换为数组:

string[] stringArray = myList.ToArray();

如果您不知道所需的确切项目数,则数组可能不是一个好选择,因为您需要调整它的大小(这是一项昂贵的操作)。

答案 2 :(得分:0)

我会使用List类。您可以根据需要添加,而无需知道您将放入多少。如果您对列表中的内容有所了解,可以使用List构造函数的capacity参数来防止性能问题。

int capacity = 3;
var listOfNames = List<string>(/* optional */ capacity);
listOfNames.Add("My Name 1");
listOfNames.Add("My Name 2");
listOfNames.Add("My Name 3");

var namesArray = listOfNames.ToArray();

我在那里添加了namesArray行,以防你出于某种原因确实需要数组而不是List。

请参阅this page,了解使用List可以做些什么。

答案 3 :(得分:0)

您可以使用以下内容,如上面提到的Oded(或下面),当项目添加到它时它会自动扩展。

List<String> l = new List<String>();

l.Add("your string here");

...如果你想迭代,那么:

foreach(string i in l)
{
   // Do something with each item (i);
}

......还有一个数组:

String[] a =
     l.ToArray();

答案 4 :(得分:0)

使用List<T>。 E.g。

var list = new List<string>();
list.Add("string1");

如果您需要将列表作为数组,List<T>具有ToArray()方法。

内部List<T>将数据存储为字符串数组。当需要更多空间时,它将分配一个当前大小的两倍的新数组,并复制对新数组的所有引用。即您不必执行任何操作,但如果代码对性能至关重要,则可能需要在创建列表时提供默认容量。

答案 5 :(得分:0)

ArrayList也可以做到这一点。

ArrayList alist = new ArrayList();

alist.Add(字符串1); alist.Add(String2的)