将 List<List<string>> 的值转换为 string[][] 数组 C#

3

我有以下两个变量:

        List<List<string>> result
        string[][] resultarray

我希望将结果中的值提取出来并存储在resultarray中,例如: [["one", "two"], ["three"], ["four", "five", six"], ["seven"], ["eight"]] 等。
以下是我的代码:
        string[][] resultarray = new string[resultint][];
        int a = new int();
        int b = new int();
        foreach (List<string> list in result)
        {
            foreach (string s in list)
            {
                resultarray[b][a] = s;
                a++;
            }
            b++;
        }
        return resultarray;

然而,在调试时,当我尝试增加a或b时,会出现“NullExceptionError:对象引用未设置为对象实例”的错误。 我也尝试将它们声明为:
    int a = 0
    int b = 0

这也不起作用。我声明的方式不正确还是与foreach循环有关?


3
第二个 foreach 循环是不必要的,只需使用 resultarray[b] = list.ToArray(); - sasjaq
2个回答

10
每个子数组一开始都是null - 你需要创建内部数组。
但更简单的方法是:
var resultarray = result.Select(x => x.ToArray()).ToArray();
假设输入为这样的内容,则该操作会产生所述结果:
var result = new List<List<string>> {
    new List<string> { "one", "two" },
    new List<string> { "three" },
    new List<string> { "four", "five", "six" },
    new List<string> { "seven" },
    new List<string> { "eight" },
};

谢谢。我一直在努力理解LINQ,但我仍然不太明白。我会继续阅读的。 - reallybadatmath
1
@reallybadatmath 基本上它的意思是“创建一个投影,其中每个项都成为该项上 ToArray() 的结果; 然后从该投影的结果创建一个数组”。 - Marc Gravell
再次感谢马克。你的解释很有道理——比尝试使用递增整数来定位索引要简单得多。 - reallybadatmath

3

内循环之前:

resultarray[b] = new string[list.Count];

1
如果我们要对内部循环进行任何操作,@sasjaq说得对。 - Marc Gravell

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