// based on https://h...content-available-to-author-only...r.ru/post/209914/
// for http://ru.stackoverflow.com/a/589005/178988
using System;
public class Container
{
public Enumerator GetEnumerator()
{
return new Enumerator();
}
}
public struct Enumerator : IDisposable
{
public int Id;
public bool MoveNext()
{
Console.WriteLine("MoveNext: {0}", this.Id);
return false;
}
public object Current
{
get { return null; }
}
public void Dispose()
{
Console.WriteLine("Dispose: {0}", this.Id);
}
}
public class Test
{
public static void Main()
{
var items = new Container();
var enumerator = items.GetEnumerator();
using (enumerator as IDisposable)
{
enumerator.Id = 7;
var exists = enumerator.MoveNext();
if (exists)
{
do
{
var item = enumerator.Current;
exists = enumerator.MoveNext();
Console.WriteLine(exists ? "{0}" : "{0} is the last one", item);
} while (exists);
}
}
Console.WriteLine("Done");
}
}
Ly8gYmFzZWQgb24gaHR0cHM6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLnJ1L3Bvc3QvMjA5OTE0LwovLyBmb3IgaHR0cDovL3J1LnN0YWNrb3ZlcmZsb3cuY29tL2EvNTg5MDA1LzE3ODk4OAoKdXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIENvbnRhaW5lcgp7CglwdWJsaWMgRW51bWVyYXRvciBHZXRFbnVtZXJhdG9yKCkKCXsKCQlyZXR1cm4gbmV3IEVudW1lcmF0b3IoKTsKCX0KfQoKcHVibGljIHN0cnVjdCBFbnVtZXJhdG9yIDogSURpc3Bvc2FibGUKewoJcHVibGljIGludCBJZDsKCQoJcHVibGljIGJvb2wgTW92ZU5leHQoKQoJewoJCUNvbnNvbGUuV3JpdGVMaW5lKCJNb3ZlTmV4dDogezB9IiwgdGhpcy5JZCk7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXB1YmxpYyBvYmplY3QgQ3VycmVudAoJewoJCWdldCB7IHJldHVybiBudWxsOyB9Cgl9CgoJcHVibGljIHZvaWQgRGlzcG9zZSgpCgl7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIkRpc3Bvc2U6IHswfSIsIHRoaXMuSWQpOwoJfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgdmFyIGl0ZW1zID0gbmV3IENvbnRhaW5lcigpOwoKICAgICAgICB2YXIgZW51bWVyYXRvciA9IGl0ZW1zLkdldEVudW1lcmF0b3IoKTsKCiAgICAgICAgdXNpbmcgKGVudW1lcmF0b3IgYXMgSURpc3Bvc2FibGUpCiAgICAgICAgewogICAgICAgIAllbnVtZXJhdG9yLklkID0gNzsKICAgICAgICAJCiAgICAgICAgICAgIHZhciBleGlzdHMgPSBlbnVtZXJhdG9yLk1vdmVOZXh0KCk7CgogICAgICAgICAgICBpZiAoZXhpc3RzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gZW51bWVyYXRvci5DdXJyZW50OwogICAgICAgICAgICAgICAgICAgIGV4aXN0cyA9IGVudW1lcmF0b3IuTW92ZU5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoZXhpc3RzID8gInswfSIgOiAiezB9IGlzIHRoZSBsYXN0IG9uZSIsIGl0ZW0pOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoZXhpc3RzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiRG9uZSIpOwogICAgfQp9