This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

IEnumerable<T> & IEnumerator<T> Contract

By: a guest on Jan 5th, 2011  |  syntax: C#  |  size: 2.09 KB  |  views: 46  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. [ContractClassFor(typeof(IEnumerable))]
  2. internal abstract class IEnumerableContract : IEnumerable
  3. {
  4.         // Methods
  5.         protected IEnumerableContract()
  6.         {
  7.         }
  8.  
  9.         [return: Fresh]
  10.         [Escapes(true, false), Pure, GlobalAccess(false)]
  11.         public IEnumerator GetEnumerator()
  12.         {
  13.                 IEnumerator enumerator;
  14.                 Contract.Ensures((bool)(Contract.Result<IEnumerator>() != null), null, "Contract.Result<IEnumerator>() != null");
  15.                 Contract.Ensures((bool)(Contract.Result<IEnumerator>().Model == this.Model), null, "Contract.Result<IEnumerator>().Model == this.Model");
  16.                 Contract.Ensures((bool)(Contract.Result<IEnumerator>().CurrentIndex == -1), null, "Contract.Result<IEnumerator>().CurrentIndex == -1");
  17.                 return enumerator;
  18.         }
  19.  
  20.         // Properties
  21.         public object[] Model
  22.         {
  23.                 get
  24.                 {
  25.                         object[] objArray;
  26.                         Contract.Ensures((bool)(Contract.Result<object[]>() != null), null, "Contract.Result<object[]>() != null");
  27.                         return objArray;
  28.                 }
  29.         }
  30. }
  31.  
  32.  
  33. [ContractClassFor(typeof(IEnumerator))]
  34. internal abstract class IEnumeratorContract : IEnumerator
  35. {
  36.         // Methods
  37.         protected IEnumeratorContract() { }
  38.  
  39.         public bool MoveNext()
  40.         {
  41.                 bool flag;
  42.                 Contract.Ensures((bool)(this.Model == Contract.OldValue<object[]>(this.Model)), null, "this.Model == Contract.OldValue(this.Model)");
  43.                 Contract.Ensures((bool)(this.CurrentIndex < this.Model.Length), null, "this.CurrentIndex < this.Model.Length");
  44.                 Contract.Ensures((bool)(this.CurrentIndex >= 0), null, "this.CurrentIndex >= 0");
  45.                 Contract.Ensures((bool)(this.CurrentIndex == (Contract.OldValue<int>(this.CurrentIndex) + 1)), null, "this.CurrentIndex == Contract.OldValue(this.CurrentIndex) + 1");
  46.                 return flag;
  47.         }
  48.  
  49.         public void Reset() { }
  50.  
  51.         // Properties
  52.         public object Current
  53.         {
  54.                 get
  55.                 {
  56.                         object obj2;
  57.                         Contract.Ensures((bool)(Contract.Result<object>() == this.Model[this.CurrentIndex]), null, "Contract.Result<object>() == this.Model[this.CurrentIndex]");
  58.                         return obj2;
  59.                 }
  60.         }
  61.  
  62.         public int CurrentIndex
  63.         {
  64.                 get
  65.                 {
  66.                         int num;
  67.                         return num;
  68.                 }
  69.         }
  70.  
  71.         public object[] Model
  72.         {
  73.                 get
  74.                 {
  75.                         object[] objArray;
  76.                         return objArray;
  77.                 }
  78.         }
  79. }
clone this paste RAW Paste Data