检查数组列表的大小

时间:2012-05-03 15:23:31

标签: c# list indexoutofboundsexception

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

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”元素。

感谢您的任何建议!

3 个答案:

答案 0 :(得分:6)

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

foreach (string[] row in parsedRaw) {
    for (int i = 0 ; i != row.Length ; i++) {
        // do something with row[i]
    }
}

答案 1 :(得分: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];
}

答案 2 :(得分: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;
}