Цитата Vostrugin (

)
1) По сути, Foreach это синтаксический сахар над for.
2) Объект не создаётся в цикле.
над for, не над while ?
Код
Container container = new Container();
Enumerator enumerator = container.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
var element = enumerator.Current;
// содержимое foreach
}
}
finally
{
IDisposable disposable = enumerator as IDisposable;
if (disposable != null)
disposable.Dispose();
}