簡體   English   中英

投射收藏集-C#

[英]Casting A Collection of Collections - C#

我有一個返回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):

重新實現對象的LINQ:第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));

我假設您有某種IEnumerable<IEnumerable<T>> 您可以使用類似以下內容的方法將其展平: YourList.SelectMany(x => x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM