.ToArray doesn'开发者_如何转开发t do it
Linq is the way to go on this one.
List<List<String>> list = ....;
string[][] array = list.Select(l => l.ToArray()).ToArray();
to break it down a little more the types work out like this:
List<List<String>> list = ....;
IEnumerable<String[]> temp = list.Select(l => l.ToArray());
String[][] array = temp.ToArray();
One quick variation on the existing answers, which uses a method group conversion instead of a lambda expression:
string[][] array = lists.Select(Enumerable.ToArray).ToArray();
In theory it'll be every so slightly faster, as there's one less layer of abstraction in the delegate passed to Select
.
Remember kids: when you see a lambda expression of this form:
foo => foo.SomeMethod()
consider using a method group conversion. Often it won't be any nicer, but sometimes it will :)
Getting back to a List<List<string>>
is easy too:
List<List<string>> lists = array.Select(Enumerable.ToList).ToList();
List<List<string>> myStrings;
myStrings.Select(l => l.ToArray()).ToArray();
(LINQ rocks)
精彩评论