Skip to main content
 首页 » 编程设计

c#之转换集合的集合之C#

2024年01月25日22飞鱼

我有一个返回 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));