You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取CSV文件时遇System.IndexOutOfRangeException异常的解决咨询

解决CSV读取时的数组索引越界问题

方案1:写一个数组安全取值的扩展方法

封装索引判断逻辑,避免重复写条件,支持自定义默认值:

public static class ArrayExtensions
{
    // 给string[]扩展安全取值方法,索引越界时返回默认值
    public static string GetSafeValue(this string[] array, int index, string defaultValue = "")
    {
        return index >= 0 && index < array.Length ? array[index].Trim() : defaultValue;
    }
}

使用示例:

// row为分割后的CSV行数组
var column6Value = row.GetSafeValue(5); // 取第6列(索引5),越界返回空字符串
var column12Value = row.GetSafeValue(11, "N/A"); // 自定义默认值为"N/A"

方案2:补全行数组到固定列数

读取每行后,将数组长度补到12列,缺失位置填充空字符串,之后可安全使用固定索引:

int expectedColumnCount = 12;
string[] row = csvLine.Split(','); // 注意:简单Split无法处理带引号的CSV,复杂场景需用更严谨的分割逻辑

if (row.Length < expectedColumnCount)
{
    Array.Resize(ref row, expectedColumnCount);
    // 填充新增位置为空字符串
    for (int i = row.Length - (expectedColumnCount - row.Length); i < expectedColumnCount; i++)
    {
        row[i] = string.Empty;
    }
}

// 现在可直接用row[0]到row[11],不会触发越界异常
var column3 = row[2];

LINQ风格的简洁写法:

var row = csvLine.Split(',')
                 .Take(expectedColumnCount)
                 .Concat(Enumerable.Repeat(string.Empty, expectedColumnCount))
                 .Take(expectedColumnCount)
                 .ToArray();

方案3:使用成熟的CSV处理库(推荐复杂场景)

如果CSV存在带引号的单元格、转义字符等复杂情况,自己分割易出问题,直接用专业库如CsvHelper(NuGet可安装),它能自动处理缺失列,映射到对象时自动设默认值:

using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;

// 定义CSV行对应的实体类,预设默认值
public class CsvRowModel
{
    public string Col1 { get; set; } = string.Empty;
    public string Col2 { get; set; } = string.Empty;
    // ... 依次定义到Col12
}

// 读取代码
using var reader = new StreamReader("your_csv_file.csv");
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    MissingFieldFound = null, // 缺失列时不抛出异常
    TrimOptions = TrimOptions.Trim // 自动去除单元格前后空格
};

using var csv = new CsvReader(reader, config);
var rows = csv.GetRecords<CsvRowModel>().ToList();

内容的提问来源于stack exchange,提问作者Stefan Fernström

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:22