Научиться использовать итераторы в C# для работы с коллекциями, понять принципы их работы и применения в реальных задачах.
Основные задачи:
IEnumerable
, IEnumerator
).Необходимо реализовать класс CustomCollection<T>
, который:
IEnumerable<T>
.Ознакомьтесь с источниками, указанными в списке литературы, который указан в конце данного задания.
CustomCollection<T>
CustomCollection<T>
, реализующий IEnumerable<T>
.GetEnumerator()
, возвращающий стандартный итератор.public class CustomCollection<T> : IEnumerable<T>
{
private readonly List<T> _items = new();
public void Add(T item) => _items.Add(item);
public IEnumerator<T> GetEnumerator() => _items.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
using Xunit;
using Moq;
public class IteratorTests
{
[Fact]
public void CustomCollection_GetEnumerator_ReturnsAllItems()
{
var collection = new CustomCollection<int>();
collection.Add(1);
collection.Add(2);
var result = new List<int>();
foreach (var item in collection)
{
result.Add(item);
}
Assert.Equal(new[] { 1, 2 }, result);
}
[Fact]
public void GetReverseEnumerator_ReturnsItemsInReverseOrder()
{
var collection = new CustomCollection<int>();
collection.Add(1);
collection.Add(2);
var result = collection.GetReverseEnumerator().ToList();
Assert.Equal(new[] { 2, 1 }, result);
}
[Fact]
public void GenerateSequence_ReturnsCorrectSequence()
{
var sequence = CustomCollection<int>.GenerateSequence(5, 3).ToList();
Assert.Equal(new[] { 5, 6, 7 }, sequence);
}
[Fact]
public void FilterAndSort_ReturnsFilteredAndSortedItems()
{
var collection = new CustomCollection<int>();
collection.Add(3);
collection.Add(1);
collection.Add(2);
var result = collection.FilterAndSort(x => x > 1, x => x).ToList();
Assert.Equal(new[] { 2, 3 }, result);
}
}
Реализуйте метод IEnumerable GetReverseEnumerator(), который возвращает элементы в обратном порядке, используя yield return.
Создайте метод static IEnumerable GenerateSequence(int start, int count), который генерирует последовательность чисел, начиная с start, длиной count.
Напишите метод IEnumerable FilterAndSort(Func<T, bool> predicate, Func<T, IComparable> keySelector), который фильтрует коллекцию с помощью Where и сортирует с помощью OrderBy.
Итераторы (C#) - Microsoft Docs
Официальная документация по реализации итераторов в C#
Интерфейс IEnumerable - Microsoft Docs
Справочник по интерфейсу IEnumerable и его использованию
Ключевое слово yield - Microsoft Docs
Документация по работе с yield return и yield break
LINQ (Language Integrated Query) - Microsoft Docs
Полное руководство по технологии LINQ в C#