我有一个返回 IEnumerable<IEnumerable<string>> 的函数.我想使用这个功能,建立在基本 IEnumerable 之上, 将其分配给 List<List<string>> .如果我只有一个维度(即一个集合),这将很容易,并且可以通过使用 ToList() 来解决。方法 - 但我如何为 IEnumerable<IEnumberable<string>> 执行此操作?不遍历每个项目?
请您参考如下方法:
你可以使用 Enumerable.SelectMany
例如(来自MSDN)
PetOwner[] petOwners =
{ new PetOwner { Name="Higa, Sidney",
Pets = new List<string>{ "Scruffy", "Sam" } },
new PetOwner { Name="Ashkenazi, Ronen",
Pets = new List<string>{ "Walker", "Sugar" } },
new PetOwner { Name="Price, Vernette",
Pets = new List<string>{ "Scratches", "Diesel" } } };
// Query using SelectMany().
IEnumerable<string> query1 = petOwners.SelectMany(petOwner => petOwner.Pets);
可能是关于该主题的最佳资源 (J.Skeet):
Reimplementing LINQ to Objects: Part 9 - SelectMany
这是另一个带有 List<List<string>> 的例子就像你的问题一样:
var lists = new List<List<string>>();
lists.Add(new List<String>(new[] { "A", "B", "C" }));
lists.Add(new List<String>(new[] { "D", "E", "F", "G" }));
lists.Add(new List<String>(new[] { "H", "I", "J", "K", "L" }));
var all = lists.SelectMany(i => i);
String allLetters= String.Format("All letters: {0}",String.Join(",",all));
