Я столкнулся с той же проблемой переполнения стека, о которой упоминалось в некоторых комментариях. В моем случае это произошло из-за того, что вызов GetEnumerator должен был выполняться в base.GetEnumerator, в противном случае вы выполняете цикл внутри своего собственного переопределения GetEnumerator.
Это код, который выбрасывал переполнение стека. Использование оператора foreach вызывает ту же функцию GetEnumerator, которую я пытаюсь перегрузить:
public new IEnumerator<T> GetEnumerator()
{
foreach (T type in this)
{
yield return type;
}
}
Я закончил с упрощенной версией исходного сообщения, так как вам не нужно использовать держатель списка.
public class ElementCollection<T> : ConfigurationElementCollection, IList<T>
...
public new IEnumerator<T> GetEnumerator()
{
var baseEnum = base.GetEnumerator();
while (baseEnum.MoveNext())
{
yield return baseEnum.Current as T;
}
}
...
}