ActiveTogglesの実装はこんな形のようです。
public IEnumerable<Toggle> ActiveToggles()
{
return from x in this.m_Toggles
where x.isOn
select x;
}
トグルグループが実際に持っているのは全てのトグルのリストだけで、LINQでアクティブなものだけを抽出して返しているようです。
やろうと思えば、これをさらに配列に変換して返すという実装にもできたものと思いますが、配列を生成するのにもある程度の計算コスト・メモリコストがかかりますので、IEnumerableのままなのかと思います。いわば「次の要素を順次取り出すための条件」だけを持っている状態ですので、たとえばforeachで列挙するだけならこの方が余計な配列生成もいらず効率的なのではないでしょうか。
例示いただいたコードにあるFirstOrDefaultについても、欲しいのは一番最初のアクティブなトグルなので、この形なら頭から順にトグルを列挙していって、アクティブなトグルが出てくればそれを返して走査を打ち切ることができますので、配列全体は必ずしも必要ではないでしょう。
もし配列が必要ならプログラマーの側でToArrayを使うことができますし、配列以外にも色々なコレクションに変換するメソッドが用意されていますので、柔軟性があるかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/27 10:16