IEnumerator implementation problem
I have this code:
public class Check21CSVRecord
{
public string TransactionType;
public string TransactionCurrency;
public string Reference;
public string PaymentType;
// date of transaction
public string TransactionDate;
public string Notes;
// customer data goes here
public string CustomerFirstName;
public string CustomerInitial;
public string CustomerLastName;
public string CustomerStreetAddress;
public string CustomerCity;
public string CustomerState;
public string CustomerZIPCode;
[FieldConverter(ConverterKind.Date, "MM/dd/yy")]
public DateTime CustomerDateBirth;
public string CustomerCountry;
public string CustomerEmail;
public string CustomerPhone;
public string CustomerIPAddress;
// MICR line goes here
public string AuxiliaryOnUs;
public string ExternalProcessingCode;
public string PayorBankRoutingNumber;
public string PayorBankRoutingNumberCheckDigit;
public string OnUs;
// check amount
[FieldConverter(ConverterKind.Double)]
public double Amount;
// what account to credit
public string CreditAccountNumber;
public string FrontImagePath;
public string BackImagePath;
// used to define if we have image or should build it dynamically
public bool IsDynamicImage{
开发者_Go百科 get
{
return (FrontImagePath.Length == 0 && BackImagePath.Length == 0);
}
}
}
public class DataProvider <T>: IEnumerator
{
private FileHelperEngine CSVReader;
private T currentRecord;
private int currentIndex;
private string file;
private T[] collection = new T[5000];
public DataProvider(string CSVFile)
{
CSVReader = new FileHelperEngine(typeof(T));
collection = CSVReader.ReadFile(file) as T[];
currentRecord = default(T);
file = CSVFile;
Reset();
}
public bool MoveNext()
{
if (++currentIndex >= collection.Count())
{
return false;
}
else
{
currentRecord = collection[currentIndex];
}
return true;
}
public void Reset()
{
currentIndex = -1;
}
public void Dispose()
{
}
public T Current
{
get
{
return currentRecord;
}
}
object System.Collections.IEnumerator.Current
{
get { return currentRecord; }
}
}
when I compile - everything is good, but when I call the class:
var input = new DataProvider<Check21CSVRecord>("../../../../Artifacts/IncomingData/Check21/check21.csv");
while (input.MoveNext())
{
Console.WriteLine(input.Current.CustomerFirstName);
}
I'm getting the following problem: http://screencast.com/t/NDBkNTNkMjkt
any ideas how to fix?
Thanks, Dmitry
You should assign file
first.
public DataProvider(string CSVFile)
{
file = CSVFile;
CSVReader = new FileHelperEngine(typeof(T));
collection = CSVReader.ReadFile(file) as T[];
currentRecord = default(T);
Reset();
}
Yeah because, 'file
' is empty/null.
精彩评论