Самое простое, что приходит мне в голову - это использовать Enumerable.Range, а затем обрабатывать различные IEnumerable с помощью стандартных операторов linq.Что-то вроде:
var list = Enumerable.Range(1, 5)
.Concat(Enumerable.Range(7, 11))
.Concat(Enumerable.Range(13, 22))
foreach(var number in list)
// Do something
Очевидно, что вы также можете использовать Union и Intersect ... очевидно, вы также можете поместить свои диапазоны в List<IEnumerable<int>>
или что-то подобное, а затем перебрать элементы для создания единого спискаиз элементов:
var ranges = new List<IEnumerable<int>>
{
Enumerable.Range(1, 5),
Enumerable.Range(7, 11),
Enumerable.Range(10, 22)
};
var unionOfRanges = Enumerable.Empty<int>();
foreach(var range in ranges)
unionOfRanges = unionOfRanges.Union(range);
foreach(var item in unionOfRanges)
// Do something