1

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

可以说我有这个:

    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

假设我有一个未知数量的大小未知的字符串 [] - 如何将它们添加到列表/多维数组中?再说一遍:我想一一添加这些字符串[]。有任何想法吗?

4

6 回答 6

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

这假设您正在构建一个二维结构。如果您想将数组“展平”为单个字符串列表,请创建一个列表,然后改用它的List.AddRange方法。

于 2012-07-23T14:43:37.410 回答
1

你缺少newArrayList 所以你应该这样做:

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带有 type 参数的方法ICollection,所以你说:

x.AddRange(a);

如果您在数组列表上执行循环,例如:

 foreach (var item in x)
         {
             Console.WriteLine(item);
         }

你会得到输出,

h 
b
于 2012-07-23T15:06:40.190 回答
1

您还没有创建要存储字符串数组的 ArrayList 实例。尝试添加

ArrayList x = new ArrayList();
x.Add(a);
...
...
于 2012-07-23T14:47:12.830 回答
1
ArrayList x = null;
x.Add(a); 

如果:

  1. 您创建一个实例ArrayList

    ArrayList x = new ArrayList();
    

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

  2. 你小心ArrayList.Add分开ArrayList.AddRange。前者添加了一个对象。在您的情况下,第一个元素(在 first 之后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);
于 2012-07-23T14:47:14.347 回答
1

关键字null本质上的意思是“没有对象”。因此,当您编写时,x.Add(a)您试图在Add不存在的东西上调用该方法。

您需要先初始化您的列表,这会将一些内容放入标记为 的框中x

ArrayList x = new ArrayList(); 

您现在可以调用x.add(a),您的代码将按预期工作。

于 2012-07-23T14:48:04.270 回答
0

一种方法是:

List<List<string>> list = new List<List<string>>();

    list.Add(new List<string>(){
        "str1", "str2", "..."
    });

一定要包括:使用 System.Collections.Generic;

于 2012-07-23T14:48:45.403 回答