C#读取文件数据到类对象时内容被覆盖的问题排查
问题原因
你只初始化了一个Content类型的对象mapTo,循环过程中只是反复修改这个对象的属性值,再将同一个对象的引用添加到列表element中。由于列表存储的是对象引用,最终所有元素指向的都是同一个Content实例,所以看起来所有记录都被最后一次修改的内容覆盖了。
修正代码
把new Content()的创建移到循环的else块内部,每次循环生成一个新的Content对象实例:
public static void Process() { var path = @"ABC.csv"; var header = false; var lines = System.IO.File.ReadAllLines(path); // 修正原代码中变量名不一致的问题(定义path却用filePath) var element = new List<Content>(); for (var i = 0; i < lines.Length; i++) { var t = lines[i]; if (!header) { header = true; } else { var data = t.Split(','); var mapTo = new Content(); // 每次循环创建新的对象实例 mapTo.Key = data[0]; mapTo.Name = data[1]; mapTo.Number = data[2]; mapTo.Date = data[3]; element.Add(mapTo); } } var result = element; }
额外提示
- 原代码存在变量名不一致的小问题(定义了
path,读取文件时却用了未声明的filePath),修正代码中已同步修复。 - 直接用
Split(',')处理CSV不够严谨,如果字段包含逗号(比如带引号的字段)会拆分错误,复杂场景建议使用专门的CSV解析库(如CsvHelper)。
内容的提问来源于stack exchange,提问作者shreyas35
相关产品推荐
相关产品推荐

