3

我有一个字符串数组列表:

List<string[]> parsedRaw = new List<string[]>();

此列表包含从 CSV 读取的行,其中 parsedRaw[3][5] 将是从 CSV 的第三行读取的第五个项目。

我知道我可以通过以下方式找到列表中的行数:

parsedRaw.Count

但是,给定一行,我怎样才能找到该行中的元素数?我试图在进入循环以从列表中读取之前执行测试,以避免“索引超出数组范围”错误,其中循环是:

for (k = 0; k < nBytes; k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}

我在 CSV 中的一行中遇到错误,该错误的元素比其他元素少。在进入这个循环之前,我需要检查 parsedRaw[i] 是否至少有“StartInt + nBytes”元素。

感谢您的任何建议!

4

3 回答 3

6

行只是一个字符串数组string[],因此您可以使用Length数组的属性找到它的大小。

foreach (string[] row in parsedRaw) {
    for (int i = 0 ; i != row.Length ; i++) {
        // do something with row[i]
    }
}
于 2012-05-03T15:26:51.453 回答
3

给定行中的元素数由下式确定

parsedRaw[theRowIndex].Length

要修复您的 for 循环,您需要将StartInt + k值限制为小于最小值nBytes和行长

for (k = 0; (k < nBytes) && (k + StartInt < parsedRaw[i].Length); k++)
{
    TheseBytes[k] = (byte)parsedRaw[i][StartInt + k];
}
于 2012-05-03T15:28:12.337 回答
1

尝试

List<string[]> parsedRaw = new List<string[]>();
parsedRaw.Add(new string[] {"test1", "test2"});
parsedRaw.Add(new string[] { "test1", "test2", "test3" });
int totalSize = 0;
for (int i = 0; i < parsedRaw.Count(); i++)
{
    int rowSize = 0;
    for (int k = 0; k < parsedRaw[i].Count(); k++)
    {
        rowSize += parsedRaw[i][k].Length;    
    }                
    totalSize += rowSize;
}
于 2012-05-03T15:32:13.320 回答