fork download
  1. // based on https://h...content-available-to-author-only...r.ru/post/209914/
  2. // for http://ru.stackoverflow.com/a/589005/178988
  3.  
  4. using System;
  5.  
  6. public class Container
  7. {
  8. public Enumerator GetEnumerator()
  9. {
  10. return new Enumerator();
  11. }
  12. }
  13.  
  14. public struct Enumerator : IDisposable
  15. {
  16. public int Id;
  17.  
  18. public bool MoveNext()
  19. {
  20. Console.WriteLine("MoveNext: {0}", this.Id);
  21. return false;
  22. }
  23.  
  24. public object Current
  25. {
  26. get { return null; }
  27. }
  28.  
  29. public void Dispose()
  30. {
  31. Console.WriteLine("Dispose: {0}", this.Id);
  32. }
  33. }
  34.  
  35. public class Test
  36. {
  37. public static void Main()
  38. {
  39. var items = new Container();
  40.  
  41. var enumerator = items.GetEnumerator();
  42.  
  43. using (enumerator as IDisposable)
  44. {
  45. enumerator.Id = 7;
  46.  
  47. var exists = enumerator.MoveNext();
  48.  
  49. if (exists)
  50. {
  51. do
  52. {
  53. var item = enumerator.Current;
  54. exists = enumerator.MoveNext();
  55.  
  56. Console.WriteLine(exists ? "{0}" : "{0} is the last one", item);
  57. } while (exists);
  58. }
  59. }
  60.  
  61. Console.WriteLine("Done");
  62. }
  63. }
Success #stdin #stdout 0.01s 29664KB
stdin
Standard input is empty
stdout
MoveNext: 7
Dispose: 0
Done