### IEnumerable\<T\> В C# для проверки пустого объекта, реализующего интерфейс `IEnumerable`, можно воспользоваться методом расширения `Any()` из пространства имен `System.Linq`. Этот метод возвращает `true`, если коллекция содержит хотя бы один элемент, и `false`, если она пустая. Вот пример кода: ```csharp using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { IEnumerable<int> numbers = new List<int>(); // Проверка на пустоту bool isEmpty = !numbers.Any(); if (isEmpty) { Console.WriteLine("Коллекция пуста"); } else { Console.WriteLine("Коллекция содержит элементы"); } } } ``` В данном примере: - `numbers` — это пустая коллекция типа `List<int>`. - Метод `Any()` возвращает `false` для пустой коллекции, и выражение `!numbers.Any()` становится `true`, указывая на то, что коллекция пуста. Такой подход эффективен и производителен, так как метод `Any()` прекращает выполнение сразу после нахождения первого элемента, если таковой имеется. ### IEnumerable без дженерика Если у вас `IEnumerable` без дженерика, вы можете воспользоваться методом `GetEnumerator` для получения перечислителя, а затем использовать его метод `MoveNext` для проверки наличия элементов в коллекции. Пример кода: ```csharp using System; using System.Collections; class Program { static void Main() { IEnumerable numbers = new ArrayList(); // пустая коллекция // Проверка на пустоту bool isEmpty = IsEnumerableEmpty(numbers); if (isEmpty) { Console.WriteLine("Коллекция пуста"); } else { Console.WriteLine("Коллекция содержит элементы"); } } static bool IsEnumerableEmpty(IEnumerable enumerable) { var enumerator = enumerable.GetEnumerator(); return !enumerator.MoveNext(); // если MoveNext() возвращает false, коллекция пуста } } ``` В данном примере: - `numbers` — это пустая коллекция типа `ArrayList`. - Метод `IsEnumerableEmpty` использует `GetEnumerator` для получения перечислителя и проверяет, возвращает ли метод `MoveNext` `false`. Если `MoveNext` возвращает `false`, значит, коллекция пуста.