C# 为什么对象可以像数组一样索引?
在我在C# 为什么对象可以像数组一样索引?,c#,lumenworks,C#,Lumenworks,在我在CsvReader()上看到的所有示例中,在读取记录后,可以索引CsvReader对象本身以检索字段值。例如: using (CsvReader csv = new CsvReader(new StreamReader("data.csv"), true)) { int fieldCount = csv.FieldCount; //Line X while (csv.ReadNextRecord()) { for (int i = 0
CsvReader
()上看到的所有示例中,在读取记录后,可以索引CsvReader
对象本身以检索字段值。例如:
using (CsvReader csv =
new CsvReader(new StreamReader("data.csv"), true))
{
int fieldCount = csv.FieldCount; //Line X
while (csv.ReadNextRecord())
{
for (int i = 0; i < fieldCount; i++)
Console.WriteLine(csv[i])); //Line Y
}
}
使用(CsvReader csv=
新的CsvReader(新的StreamReader(“data.csv”),真)
{
int fieldCount=csv.fieldCount;//第X行
而(csv.ReadNextRecord())
{
对于(int i=0;i
显然,csv
是CsvReader
的一个实例,不管它是什么类型
在X行,如果我尝试引用csv[I]
我会得到一个系统.ArgumentOutOfRangeException
在Y行,我可以访问csv[0]
等。[]是什么意思?它不是索引数组吗
由于
csv[I]
没有Length
属性,如何动态找出它的上限?实现了一个索引器
public virtual string this[int field]
{
get
{
return ReadField(field, false, false);
}
}
这就是例外的来源
private string ReadField(int field, bool initializing, bool discardValue)
{
if (!initializing)
{
if (field < 0 || field >= _fieldCount)
throw new ArgumentOutOfRangeException("field", field,
string.Format(CultureInfo.InvariantCulture, ExceptionMessage.FieldIndexOutOfRange, field));
}
私有字符串读取字段(int字段、bool初始化、bool值)
{
如果(!正在初始化)
{
如果(字段<0 | |字段>=\u字段计数)
抛出新ArgumentOutOfRangeException(“字段”),字段,
Format(CultureInfo.InvariantCulture,ExceptionMessage.FieldIndexOutFrange,field));
}
之所以抛出它,是因为不调用
ReadNextRecord\u fieldCount
等于0。在第X行,i
是未定义的。您如何在那里引用csv[i]
?