Разрешение итерации без генерации мусора

У меня есть следующий код в пуле объектов, который реализует интерфейс IEnumerable.

public IEnumerable ActiveNodes
{
    get
    {
        for (int i = 0; i < _pool.Count; i++)
        {
            if (_pool[i].AvailableInPool)
            {
                yield return _pool[i];
            }
        }
    }
}

Насколько мне известно (согласно этот вопрос), это будет генерировать мусор, поскольку объект IEnumerable необходимо будет собрать. Ни один из элементов в _pool никогда не будет собран, поскольку цель пула - хранить ссылки на все из них, чтобы предотвратить создание мусора.

Может ли кто-нибудь предложить способ разрешить итерацию по _pool, чтобы не генерировался мусор?

При итерации по пулу все элементы в пуле, для которых AvailableInPool == true , должны быть повторены. Порядок не имеет значения.

25
задан Community 23 May 2017 в 12:02
поделиться