次のコードがあるとします(質問の範囲を制限するためにコンテキストを絞り込みました)
public static IEnumerable<Color> GetThemColors(){
var ids = GetThePrimaryIds();
foreach (int id in ids){
yield return GetColorById(id);
}
ids = GetTheOtherIds();
foreach (int id in ids){
yield return GetOtherColorsById(id);
}
}
私はそれらをこのようなものに書き直したいと思います(もちろんコンパイルされません
public static IEnumerable<Color> GetThemColors(){
GetThePrimaryIds().Select(id=>yield return GetColorById(id));
GetTheOtherIds().Select(id=>yield return GetOtherColorsById(id));
}
重要な点は、最初のスニペットで2つのforeach列挙子が生成されることです。これは、遅延読み込み機能を失うことなくlinqで実行する方法がわかりません。