2012-03-13 9 views
1

私はIEnumerable<IEnumerable<string>>を返す関数を持っています。この関数を基本として、IEnumerableを基にして、List<List<string>>に割り当てたいと思います。 1つのディメンション(つまり1つのコレクション)を持っていて、ToList()メソッドを使用して解決すると、これは簡単ですが、各アイテムを反復することなくIEnumerable<IEnumberable<string>>の場合はどうすればよいですか?コレクションのコレクションをキャスト - C#

+0

私はあなたがすべての項目を反復しなければならないと思います、IEnumerableは反復のみをサポートします。それはオブジェクトが何の下にあるかに依存します!いくつかのコード? – Liam

+0

もう少し詳しく説明する必要があると思います。 「もし私がちょうど1つの次元を持っていたら」とはどういう意味ですか?また、アイテムのリストを反復せずに作成することもできません。どのようにリストが生成されますか? IEnumerableは必ずしも「具体的」ではありません。つまり、列挙可能な各項目は、アクセスするまで存在しない可能性があります。 –

+0

1次元では1次元を意味します... 1リストのように。 2次元はリストのリストです.1dと2dの配列と同じです... – user559142

答えて

6

あなたは、このトピック(J.Skeet)でおそらく最高のリソース(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); 

Enumerable.SelectMany

を使用することができます。

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)); 
+2

+1の完全性。 –

1

IEnumerable<IEnumerable<T>>のようなものがあるとします。次のような方法でフラット化することができます:YourList.SelectMany(x => x)

関連する問題