سؤال

ويقول لدي البرمجية التالية (السياق يضيق الخناق للحفاظ على نطاق مسألة محدودة)

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top