Coverity, Enumerable.Where(this ...) и IDisposable

Итак, анализ кода говорит мне, что Enumarble.Where(this ...) возвращает экземпляр WhereListIterator, который является (похоже) внутренним типом в .NET framework, реализующим IDisposable.

Coverity не любит, когда IDisposable остаются неутилизированными, и поэтому предлагает мне утилизировать указанный экземпляр. Очевидно, что я не могу избавиться от экземпляра без проверки типа, так как Enumerable.Where(this ...), как говорят, возвращает IEnumerable, который не ихнерит из IDisposable.

Мой вопрос заключается в следующем: Ожидает ли .NET, что я утилизирую WhereListIterator, или итератор утилизируется сам (скажем, после каждого перечисления). Если не предполагается, что я буду его утилизировать, то зачем тогда реализован этот интерфейс? Это приводит меня к третьему, немного несвязанному вопросу: Если бы IDisposable был реализован явно, Coverity (анализ кода) все равно считал бы, что я должен его утилизировать?

Пример кода:

var myList = new List<int>{ 1, 2, 3, 4 };

var evenNumbers = myList.Where(x => x % 2 == 0);

foreach(var number in evenNumbers)
{
    Console.WriteLine(number);
}

if(evenNumbers is IDisposable)
{
    ((IDisposable)evenNumbers).Dispose(); // This line will be executed
}
6
задан cwharris 1 December 2011 в 22:28
поделиться