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
相关产品推荐
相关产品推荐

