Реализация пустых итераторов
-
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 уже имеет метод, который делает именно это, кстати (делая код Джареда избыточным): 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