Skip to content

Instantly share code, notes, and snippets.

@jsmarble
Created October 16, 2016 23:18
Show Gist options
  • Save jsmarble/ff70d97998c7fd1afaba5a2508df949d to your computer and use it in GitHub Desktop.
Save jsmarble/ff70d97998c7fd1afaba5a2508df949d to your computer and use it in GitHub Desktop.
public class DataReaderEnumerable : IEnumerable<IDataReader>, IDisposable
{
public IDataReader DataReader { get; private set; }
private bool enumerated = false;
public DataReaderEnumerable(IDataReader dataReader)
{
this.DataReader = dataReader;
}
#region IEnumerable<IDataReader> Members
public IEnumerator<IDataReader> GetEnumerator()
{
if (enumerated)
throw new InvalidOperationException("The IDataReader can only be enumerated once.");
enumerated = true;
return new DataReaderEnumerator(this.DataReader);
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
#endregion
#region IDisposable Members
public void Dispose()
{
this.DataReader.Dispose();
}
#endregion
}
public class DataReaderEnumerator : IEnumerator<IDataReader>
{
public IDataReader DataReader { get; private set; }
public DataReaderEnumerator(IDataReader dataReader)
{
this.DataReader = dataReader;
}
#region IEnumerator<IDataReader> Members
public IDataReader Current
{
get { return this.DataReader; }
}
#endregion
#region IDisposable Members
public void Dispose()
{
this.DataReader.Dispose();
}
#endregion
#region IEnumerator Members
object System.Collections.IEnumerator.Current
{
get { return this.Current; }
}
public bool MoveNext()
{
return this.DataReader.Read();
}
public void Reset()
{
throw new NotImplementedException();
}
#endregion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment