### 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`, значит, коллекция пуста.