/// <summary>
 /// Cleanup and mark for GC cleanup
 /// </summary>
 public void Dispose()
 {
     if (Cache != null)
     {
         Cache.Dispose(); Cache = null;
     }
     EOF = true;  // forces SplitItem() to enumerate nothing in case someone attempts to use this object after Dispose()
 }
 /// <summary>
 /// Construct a new CSV data parser object.
 /// </summary>
 /// <param name="s">CSV data stream containing a single page of CSV data.</param>
 public CsvReader(Stream s)
 {
     Cache = new CharCache(s);
 }
 /// <summary>
 /// Construct a new CSV data parser object
 /// </summary>
 /// <param name="filename">Name of file containing a single page of CSV data.</param>
 public CsvReader(string filename)
 {
     Cache = new CharCache(filename);
 }
 /// <summary>
 /// Construct a new CSV data parser object.
 /// </summary>
 /// <param name="s">CSV text data stream that contains 1 or more pages of CSV data where each unique CSV page is delimited by a form-feed ('\f') character.</param>
 public CsvReader(TextReader s)
 {
     Cache = new CharCache(s);
 }