6

假设我有以下代码(缩小范围以限制问题范围)

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 中执行此操作而不会丢失我的延迟加载功能。

4

1 回答 1

15

你想要Concat

return GetThePrimaryIds().Select(id => GetColorById(id)).Concat(
    GetTheOtherIds().Select(id => GetOtherColorsById(id)));

另请注意,您不需要yield return在 lambdas 中。

于 2009-12-01T09:12:20.953 回答