6
說我有下面的代碼(背景下縮小以保持問題包括但不限於)將這個foreach產量重寫爲linq產量?
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));
}
。
關鍵的一點是,在我的第一個片段,我有兩個的foreach枚舉屈服,我不知道如何在LINQ做不失去我的懶加載功能
謝謝,沒有意識到concat是懶惰的 – 2009-12-01 09:25:09
據我所知,Enumerable上返回IEnumerable的所有方法都是懶惰的。 – Joren 2009-12-01 10:07:16
確實如此,但由於某種原因,Concat會返回一個IList – 2009-12-01 10:30:13