تنفيذ التكرارات الفارغة
-
05-07-2019 - |
سؤال
ولدي هذا الرمز:
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; }
}
لا تنتمي إلى StackOverflow