未知大小的字符串数组

56
在C#.NET中,如何处理一个字符串数组并且不知道数组大小?
String[] array = new String[]; // this does not work

在这里找到了可能的重复问题和好答案:https://stackoverflow.com/questions/53441268/still-learning-system-stackoverflowexception-was-thrown - m3.b
13个回答

96
Great! I'm here to assist you in translating any text that you need help with. What language do you need to translate from and to?
List<String> list = new List<String>();

list.Add("Hello");
list.Add("world");
list.Add("!");

Console.WriteLine(list[2]);

会给您一个输出结果。
!

请访问MSDN - List(T) 了解更多相关的IT技术信息。


它们会在我放置的顺序之后添加,这样我就可以像数组[int]一样调用它们吗? - eriksv88
1
它们将按您添加它们的顺序进行添加,您可以使用索引器访问它们。编辑答案以获取示例。 - Stan R.
1
是的,您仍然可以像使用数组一样索引泛型列表中的项。 - David
我认为(并且我认为MSDN文档证实了这一点...)List类的内部顺序是不被保证的实现细节。如果您需要确保顺序,就像数组一样,请使用Queue。 - jasonh
最好使用 var array = new List<String>(); - Incognito
显示剩余2条评论

26

在实例化数组时,不必指定其大小。

你仍然可以声明该数组并稍后进行实例化。例如:

string[] myArray;

...

myArray = new string[size];

9

你不能创建一个没有大小的数组。你需要使用一个列表。


7

正如其他人提到的,你可以使用 List<String>(我同意这将是更好的选择)。如果你需要 String[](例如要传递给现有需要它的方法),你可以从列表中检索数组(它是 List<T> 的内部数组的副本),像这样:

String[] s = yourListOfString.ToArray();

6
你可以像下面这样声明一个空数组。
String[] arr = new String[]{}; // declare an empty array
String[] arr2 = {"A", "B"}; // declare and assign values to an array
arr = arr2; // assign valued array to empty array

您不能像下面这样给上述空数组赋值。
arr[0] = "A"; // you can't do this

0

我认为你可能正在寻找StringBuilder类。如果不是的话,那么可以使用字符串形式的通用List类:

List<string> myStringList = new List<string();
myStringList.Add("Test 1");
myStringList.Add("Test 2");

或者,如果你需要绝对确保字符串保持有序:
Queue<string> myStringInOriginalOrder = new Queue<string();
myStringInOriginalOrder.Enqueue("Testing...");
myStringInOriginalOrder.Enqueue("1...");
myStringInOriginalOrder.Enqueue("2...");
myStringInOriginalOrder.Enqueue("3...");

请记住,使用List类时,项目的顺序是实现细节,不能保证它们会按照您放置的顺序保持不变。


他为什么要寻找 StringBuilder?这没有道理。 - Stan R.
看起来他正在尝试组合几个字符串。我建议他如果想要跟踪多个字符串,可以使用List类。另外,如果他需要保留顺序,可以使用Queue类。 - jasonh
1
使用List类时,项目的顺序是一种实现细节,不能保证它们将保持您放置它们的相同顺序。这是不正确的。List保留顺序:如果你执行了一系列的添加操作,然后迭代列表,那么项目将按照你添加它们的顺序排列。(当然,您可以明确地将项插入到列表中间、对列表进行排序等; 但是,事情仍然按照您所请求的顺序进行。) 您可能在想字典、哈希集等问题。 - itowlson

0

我猜数组大小是一个计算出来的值。

int size = ComputeArraySize();

// Then

String[] array = new String[size]; 

0
如果您稍后会知道数组的长度,您可以像这样创建初始数组:

String[] array;

当你知道长度后,你可以像这样完成初始化

array = new String[42];

0
你能使用字符串列表,然后在完成后使用 strings.ToArray() 来获取要处理的字符串数组吗?

0
如果你想在不知道大小的情况下使用数组,你必须先声明它,然后再实例化它,例如:
string[] myArray;
...
...
myArray=new string[someItems.count];

1
你看到这个问题已经有答案了吗?还有,这是什么时候创建的?如果你想得到积分,我建议你看看新的项目。 - eriksv88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接