c# - 使用 DataTable 时出现 IndexOutOfRange 异常

标签 c# .net datatable

我正在使用 StreamReader 访问 CSV 文本文件并将所有行读取到 DataTable。

public static DataTable ConvertToDataTable(string filePath, int numberOfColumns)
    {
        DataTable tbl = new DataTable();

        for (int col = 0; col < numberOfColumns; col++)
            tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));

        string line;
        System.IO.StreamReader file = new StreamReader("C:/ProgramData/3CX/Instance1/Data/Logs/CDRLogs/cdr.log");

        while ((line = file.ReadLine()) != null)
        {
            var cols = line.Split(',');
            DataRow dr = tbl.NewRow();
            for (int cIndex = 0; cIndex < cols.Length + 1; cIndex++)
            {
                dr[cIndex] = cols[cIndex];
            }
            tbl.Rows.Add(dr);
        }

将所有 CSV 行添加到 DataTable 后,我想遍历这些行并根据条件删除不需要的行。

DataTable dt = ConvertToDataTable("C:/ProgramData/3CX/Instance1/Data/Logs/CDRLogs", 4);

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            string duration = dt.Rows[i][1].ToString();
            if (duration == "")
            {
                dt.Rows[i].Delete();
            }
            Console.WriteLine(i.ToString() + dt.Rows[i][1].ToString());
        }

这运行得很好,直到我到达最后一行,它似乎正在循环遍历不存在的一行。

有人知道为什么吗?任何和所有帮助将不胜感激!

最佳答案

您可以向后遍历行以保持索引不变。

for(int i = dt.Rows.Count - 1; i >= 0; i--)
{
   dt.Rows[i].Delete();
}

关于c# - 使用 DataTable 时出现 IndexOutOfRange 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914505/

相关文章:

c# - 尝试确定两个 List<T> 中的公共(public)元素时出现问题

c# - 有没有办法在调试 C# 程序时使用 F# 交互模式?

.net - 基于正态分布的范围内的随机数

.net - SMS - 传入消息处理

c# - 数据表到多维数组

php - 数据表全局搜索偶尔抛出 ajax 错误

c# - 使用 HttpClient.GetAsync() 时如何确定 404 响应状态

c# - 关于 MVC 中异步/等待的矛盾建议

.net - 为什么 .NET 框架不包含 USB 工具

wpf - WPF的gridview中如何设置某列的背景色