إعادة كتابة هذا العائد foreach إلى العائد LINQ؟
-
22-07-2019 - |
سؤال
ويقول لدي البرمجية التالية (السياق يضيق الخناق للحفاظ على نطاق مسألة محدودة)
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
:
return GetThePrimaryIds().Select(id => GetColorById(id)).Concat(
GetTheOtherIds().Select(id => GetOtherColorsById(id)));
لاحظ أيضا أن لا تحتاج yield return
في lambdas.
لا تنتمي إلى StackOverflow