我想将数组添加到列表或多维数组中(不是一次性...)。但我真的不明白为什么这应该那么难。
让我说我有这个:
string[] a = { "h", "b"};
string[] b = { "c", "a", "i" };
string[] c = { "out", "in", "file", "test" };
ArrayList x = null;
x.Add(a); //error: Object reference not set to an instance of an object.
x.Add(b);
x.Add(c);
我可以使用而不是ArrayList吗
string[,] x = null;
但是没有.Add
的选项假设我有一个未知数量的字符串[]未知大小 - 如何将它们添加到List /多维数组?再说一次:我想逐个添加这些字符串[]。有什么想法吗?
答案 0 :(得分:6)
您收到NullReferenceException
,因为您的列表未初始化:
string[] a = { "h", "b"};
string[] b = { "c", "a", "i" };
string[] c = { "out", "in", "file", "test" };
IList<string[]> x = new List<string[]>;
x.Add(a);
x.Add(b);
x.Add(c);
这假设您正在构建二维结构。如果你想&#34;压扁&#34;将您的数组放入一个字符串列表中,创建一个列表,然后使用其List.AddRange
方法。
答案 1 :(得分:1)
您尚未创建要存储字符串数组的ArrayList实例。请尝试添加
ArrayList x = new ArrayList();
x.Add(a);
...
...
答案 2 :(得分:1)
ArrayList x = null; x.Add(a);
如果符合以下条件,那将会有效:
您创建了ArrayList
的实例:
ArrayList x = new ArrayList();
您所做的只是声明一个局部变量。
您需谨慎ArrayList.Add
与ArrayList.AddRange
分开。前者添加了一个对象。在您的情况下,第一个元素(在第一个Add
之后)本身就是一个数组。要访问“h”,需要x[0][0]
。 AddRange
在术语中获取每个传递的集合元素,并将其添加到集合中。因此获得“h”将是x[0]
而“b”将是x[1]
。
我想你想要:
string[] a = { "h", "b"};
string[] b = { "c", "a", "i" };
string[] c = { "out", "in", "file", "test" };
ArrayList x = new ArrayList();
x.AddRange(a);
x.AddRange(b);
x.AddRange(c);
答案 3 :(得分:1)
关键字null
实质上意味着“没有对象”。因此,当您编写x.Add(a)
时,您试图在不存在的内容上调用Add
方法。
您需要首先初始化您的列表,这会在标有x
的框中添加内容:
ArrayList x = new ArrayList();
您现在可以致电x.add(a)
,您的代码将按预期运行。
答案 4 :(得分:1)
您缺少ArrayList的new
,所以您应该这样做:
ArrayList x = new ArrayList();
x.AddRange(a);
x.AddRange(b);
x.AddRange(c);
你不能在Add
方法中使用数组,你不会得到任何编译错误,但是当你访问该对象时,你将只获得ToString
类型,这意味着如果你说:
string[] a = { "h", "b"};
x.Add(a);
然后尝试循环遍历以下元素:
foreach (var item in x)
{
Console.WriteLine(item);
}
你会得到结果:System.String[]
我希望你不要那样,所以你需要使用带有AddRange
类型参数的ICollection
方法,所以你说:
x.AddRange(a);
如果你在数组列表上执行循环,例如:
foreach (var item in x)
{
Console.WriteLine(item);
}
你会得到输出,
h
b
答案 5 :(得分:0)
一种方法是:
List<List<string>> list = new List<List<string>>();
list.Add(new List<string>(){
"str1", "str2", "..."
});
一定要包括:using System.Collections.Generic;