将数组添加到数组中 - 逐个添加

时间:2012-07-23 14:41:35

标签: c# .net arrays string list

我想将数组添加到列表或多维数组中(不是一次性...)。但我真的不明白为什么这应该那么难。

让我说我有这个:

    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 /多维数组?再说一次:我想逐个添加这些字符串[]。有什么想法吗?

6 个答案:

答案 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); 

如果符合以下条件,那将会有效:

  1. 您创建了ArrayList的实例:

    ArrayList x = new ArrayList();
    

    您所做的只是声明一个局部变量。

  2. 您需谨慎ArrayList.AddArrayList.AddRange分开。前者添加了一个对象。在您的情况下,第一个元素(在第一个Add之后)本身就是一个数组。要访问“h”,需要x[0][0]AddRange在术语中获取每个传递的集合元素,并将其添加到集合中。因此获得“h”将是x[0]而“b”将是x[1]

  3. 我想你想要:

    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;