luk*_*uke 12

Linq是继续这个的方式.

List<List<String>> list = ....;
string[][] array = list.Select(l => l.ToArray()).ToArray();
Run Code Online (Sandbox Code Playgroud)

为了打破它,类型的工作方式如下:

List<List<String>> list = ....;
IEnumerable<String[]> temp = list.Select(l => l.ToArray());
String[][] array = temp.ToArray();
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 9

现有答案的一个快速变体,它使用方法组转换而不是lambda表达式:

string[][] array = lists.Select(Enumerable.ToArray).ToArray();
Run Code Online (Sandbox Code Playgroud)

从理论上讲,它会稍微快一点,因为传递给代理的抽象层少了一层Select.

记住孩子:当你看到这种形式的lambda表达式时:

foo => foo.SomeMethod()
Run Code Online (Sandbox Code Playgroud)

考虑使用方法组转换.通常它不会更好,但有时它会:)

回到a List<List<string>>也很容易:

List<List<string>> lists = array.Select(Enumerable.ToList).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止,我没有意识到使用方法组可以节省一个间接层 - 我从来没有真正考虑它并且总是把它解释为一种语法糖.这个洞察力+1. (3认同)
  • @KevinDeus:你的意思是回到`List <List <string >>`? (2认同)