Итак, анализ кода говорит мне, что 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
}