将这个foreach产量重写为linq产量?
假设我有以下代码(上下文缩小以保持问题范围有限)
public static IEnumerable 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 GetThemColors(){ GetThePrimaryIds().Select(id=>yield return GetColorById(id)); GetTheOtherIds().Select(id=>yield return GetOtherColorsById(id)); }
关键点在于,在我的第一个片段中,我有两个foreach枚举器屈服,我不知道如何在linq中做什么而不会丢失我的延迟加载function。
你想要Concat
:
return GetThePrimaryIds().Select(id => GetColorById(id)).Concat( GetTheOtherIds().Select(id => GetOtherColorsById(id)));
另请注意,lambda中不需要yield return
。