سؤال

ولدي هذا الرمز:

    public IEnumerable<int> Iterator {
        get { if (false) yield return -1; }
    }

ومن القبيح إلى حد ما، ولكن عند محاولة ريفاكتور ل:

    public IEnumerable<int> Iterator {
        get { return null; }
    }

والتعليمة البرمجية التالية فواصل:

foreach (var item in obj.Iterator) {
}

وكيف يمكنك أن تذهب نحو تنظيف هذا الأمر؟

هل كانت مفيدة؟

المحلول

وعلى .NET Framework بالفعل طريقة لتفعل بالضبط هذا، بالمناسبة (صنع زائدة كود جاريد): <وأ href = "http://msdn.microsoft.com/en-us/library/bb341042.aspx "يختلط =" نوفولو noreferrer "> System.Enumerable.Empty<T> .

نصائح أخرى

public IEnumerable<int> Iterator {
    get { yield break; }
}

والحل الأفضل يتمثل في تحديد الطريقة التي يمكن إعادة استخدامها لهذه المشكلة. وأظل طريقة حولها في مكتبتي المشتركة لرعاية هذه الحالة فقط.

public static class CollectionUtility { 
  public static IEnumerable<T> CreateEmptyEnumerable<T>() {
    yield break;
  }
}

والآن في طريقة بك هل يمكن أن مجرد دعوة

public static IEnumerable<int> Iterator { 
  get { return CollectionUtility.CreateEmptyEnumerable<int>(); }
}
  public IEnumerable<int> Iterator {
        get { yield break; }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top