// 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 bool MoveNext()
{
return false;
}
public object Current
{
get { return null; }
}
public void Dispose()
{
Console.WriteLine("Dispose");
}
}
public class Test
{
public static void Main()
{
var items = new Container();
var enumerator = items.GetEnumerator();
using (enumerator as IDisposable)
{
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");
}
}
Ly8gYmFzZWQgb24gaHR0cHM6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLnJ1L3Bvc3QvMjA5OTE0LwovLyBmb3IgaHR0cDovL3J1LnN0YWNrb3ZlcmZsb3cuY29tL2EvNTg5MDA1LzE3ODk4OAoKdXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIENvbnRhaW5lcgp7CglwdWJsaWMgRW51bWVyYXRvciBHZXRFbnVtZXJhdG9yKCkKCXsKCQlyZXR1cm4gbmV3IEVudW1lcmF0b3IoKTsKCX0KfQoKcHVibGljIHN0cnVjdCBFbnVtZXJhdG9yIDogSURpc3Bvc2FibGUKewoJcHVibGljIGJvb2wgTW92ZU5leHQoKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCglwdWJsaWMgb2JqZWN0IEN1cnJlbnQKCXsKCQlnZXQgeyByZXR1cm4gbnVsbDsgfQoJfQoKCXB1YmxpYyB2b2lkIERpc3Bvc2UoKQoJewoJCUNvbnNvbGUuV3JpdGVMaW5lKCJEaXNwb3NlIik7Cgl9Cn0KCnB1YmxpYyBjbGFzcyBUZXN0CnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICB2YXIgaXRlbXMgPSBuZXcgQ29udGFpbmVyKCk7CgogICAgICAgIHZhciBlbnVtZXJhdG9yID0gaXRlbXMuR2V0RW51bWVyYXRvcigpOwoKICAgICAgICB1c2luZyAoZW51bWVyYXRvciBhcyBJRGlzcG9zYWJsZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBleGlzdHMgPSBlbnVtZXJhdG9yLk1vdmVOZXh0KCk7CgogICAgICAgICAgICBpZiAoZXhpc3RzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gZW51bWVyYXRvci5DdXJyZW50OwogICAgICAgICAgICAgICAgICAgIGV4aXN0cyA9IGVudW1lcmF0b3IuTW92ZU5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoZXhpc3RzID8gInswfSIgOiAiezB9IGlzIHRoZSBsYXN0IG9uZSIsIGl0ZW0pOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoZXhpc3RzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiRG9uZSIpOwogICAgfQp9