Ознайомитися з інтерфейсами IComparer<T>
та IEnumerable<T>
у C#, реалізувати сортування колекцій та ітерацію елементів. Розвинути навички створення вкладених класів-компараторів та реалізації ітераторів для власних типів.
Додайте до класу Student
вкладені (nested) класи, які реалізують інтерфейс IComparer<Student>
:
AverageGradeComparer
: сортує студентів за зростанням середнього балу (ascending). У разі рівних балів — за алфавітом ПІБ.FullNameComparer
: сортує студентів за ПІБ (прізвище + ім'я) в алфавітному порядку (case-insensitive). У разі однакового ПІБ — за середнім балом (descending).
Врахуйте:
- Обробку
null
-значень уCompare
(кидайтеArgumentNullException
для безпеки). - Використовуйте
string.Compare
для текстових порівнянь.
Клас Group
повинен:
- Реалізувати узагальнений інтерфейс
IEnumerable<Student>
(рекомендовано; альтернативно — duck typing з методомGetEnumerator()
). - Надати можливість ітерації студентів за допомогою
foreach
. - Реалізувати вкладений клас
GroupEnumerator
, який успадковуєIEnumerator<Student>
(з методамиMoveNext
,Reset
,Dispose
та властивістюCurrent
). - Додати неявну реалізацію неузагальненого
IEnumerable.GetEnumerator()
для сумісності.
Врахуйте:
- Початковий стан енумератора (
index = -1
). - Правильну логіку
MoveNext
для обходу колекції без виходу за межі.
- Створіть 3–7 об'єктів
Student
з різними значеннями (бали випадкові). - Додайте їх до екземпляра
Group
. - Виконайте сортування колекції групи:
- За середнім балом (використовуйте
Array.Sort
абоList.Sort
зAverageGradeComparer
). - За ПІБ (з
FullNameComparer
).
- За середнім балом (використовуйте
- Виведіть результати сортувань у консоль (формат: "Ім'я Прізвище: середній бал = X").
- Перевірте ітерацію: використайте
foreach
для виведення всіх студентів групи (до та після сортувань).
- Консольний вивід демонструє правильне сортування та ітерацію без помилок компіляції/виконання.
- Код компілюється та виконується в .NET 9.
- Демонстрація різниці між компараторами та ітератором.