回答編集履歴

1

説明を追加

2017/10/26 20:11

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -20,8 +20,10 @@
20
20
 
21
21
 
22
22
 
23
- トグルグループが実際に持っているのは全てのトグルのリストだけで、Linqでアクティブなものだけを抽出して返しているようです。
23
+ トグルグループが実際に持っているのは全てのトグルのリストだけで、LINQでアクティブなものだけを抽出して返しているようです。
24
24
 
25
25
  やろうと思えば、これをさらに配列に変換して返すという実装にもできたものと思いますが、配列を生成するのにもある程度の計算コスト・メモリコストがかかりますので、IEnumerableのままなのかと思います。いわば「次の要素を順次取り出すための条件」だけを持っている状態ですので、たとえばforeachで列挙するだけならこの方が余計な配列生成もいらず効率的なのではないでしょうか。
26
26
 
27
+ 例示いただいたコードにある[FirstOrDefault](https://msdn.microsoft.com/ja-jp/library/system.linq.enumerable.firstordefault(v=vs.110).aspx)についても、欲しいのは一番最初のアクティブなトグルなので、この形なら頭から順にトグルを列挙していって、アクティブなトグルが出てくればそれを返して走査を打ち切ることができますので、配列全体は必ずしも必要ではないでしょう。
28
+
27
29
  もし配列が必要ならプログラマーの側で[ToArray](https://msdn.microsoft.com/ja-jp/library/bb298736(v=vs.110).aspx)を使うことができますし、配列以外にも色々なコレクションに変換するメソッドが用意されていますので、柔軟性があるかと思います。