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

C#导入CSV文件时字符串转double[]数组问题求助

问题核心原因

你当前代码中columns[1].ToArray()的逻辑是将字符串本身拆分为char类型的字符数组,完全不符合转换为double数组的需求。存储hours、rates的CSV字段内部有独立的分隔符(不会和CSV全局分隔符逗号冲突,常见为|、;等),需要先按该分隔符拆分字段内容,再逐个转换为double类型。

修正后代码

假设你的hours、rates字段内部使用|作为分隔符,只需修改createPayRecord方法中hours、rates的赋值逻辑即可:

private static PayRecord createPayRecord(string line)
{
    string[] columns = line.Split(',');
    int id = int.Parse(columns[0]);
    // 先按字段内部分隔符拆分,再逐个转double
    double[] hours = columns[1].Split('|').Select(double.Parse).ToArray();
    double[] rates = columns[2].Split('|').Select(double.Parse).ToArray();
    int visa = int.Parse(columns[3]);
    int yearToDate = int.Parse(columns[4]);


    switch (visa)
    {
        case 417:
            return new WorkingHolidayPayRecord(id, hours, rates, visa, yearToDate);
        case 462:
            return new WorkingHolidayPayRecord(id, hours, rates, visa, yearToDate);
        default:
            return new ResidentPayRecord(id, hours, rates);
    }
}

注意:把代码里的|替换成你实际CSV中hours、rates字段内部使用的分隔符即可。

可选容错优化

如果存在字段内容不规范可能转换失败的场景,可以用安全转换逻辑避免程序直接崩溃:

double[] hours = columns[1].Split('|')
    .Where(s => double.TryParse(s, out _))
    .Select(double.Parse)
    .ToArray();

内容的提问来源于stack exchange,提问作者blindmouse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:54:02