【发布时间】:2011-03-10 21:13:48
【问题描述】:
.ToArray 不这样做
【问题讨论】:
.ToArray 不这样做
【问题讨论】:
Linq 是实现这一目标的方法。
List<List<String>> list = ....;
string[][] array = list.Select(l => l.ToArray()).ToArray();
为了进一步分解,类型如下所示:
List<List<String>> list = ....;
IEnumerable<String[]> temp = list.Select(l => l.ToArray());
String[][] array = temp.ToArray();
【讨论】:
现有答案的一个快速变体,它使用方法组转换而不是 lambda 表达式:
string[][] array = lists.Select(Enumerable.ToArray).ToArray();
理论上它会稍微快一点,因为传递给Select的委托中的抽象层少了一层。
记住孩子们:当你看到这种形式的 lambda 表达式时:
foo => foo.SomeMethod()
考虑使用方法组转换。通常它不会更好,但有时它会:)
回到List<List<string>> 也很容易:
List<List<string>> lists = array.Select(Enumerable.ToList).ToList();
【讨论】:
List<List<string>>吗?
List<List<string>> myStrings;
myStrings.Select(l => l.ToArray()).ToArray();
(LINQ 摇滚)
【讨论】: