IEnumerator实现问题
我有这样的代码:
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{
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; }
}
}
当我编译时 - 一切都很好,但是当我调用该类时:
var input = new DataProvider<Check21CSVRecord>("../../../../Artifacts/IncomingData/Check21/check21.csv");
while (input.MoveNext())
{
Console.WriteLine(input.Current.CustomerFirstName);
}
我遇到以下问题: http://screencast.com/t/NDBkNTNkMjkt
有什么解决办法吗?
谢谢, 德米特里
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{
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该首先分配
file
。You should assign
file
first.是的,因为“
file
”是空的/null。Yeah because, '
file
' is empty/null.