.NET 6中CsvReader.EnumerateRecords重复返回最后一行数据问题
问题原因与解决方案
核心问题:你重复复用了同一个
Students对象实例。
CsvHelper的EnumerateRecords(obj)方法会持续修改传入的同一个对象的属性值来映射每一行数据,而非为每一行创建新对象。最终所有记录都是指向同一个obj的引用,当最后一行数据覆盖完属性后,所有引用自然都显示最后一行的内容。正确写法:使用泛型版本的
EnumerateRecords<Students>(),让CsvHelper自动为每一行创建新的Students实例:
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { csv.Configuration.TrimOptions = CsvHelper.Configuration.TrimOptions.Trim; var records = csv.EnumerateRecords<Students>(); // 自动为每行生成新对象 }
- 补充说明:如果需要自定义对象创建逻辑,可通过
csv.Configuration.RegisterClassMap配置映射规则,或在迭代过程中手动处理对象实例,但绝大多数场景下直接使用泛型方法即可解决问题。
内容的提问来源于stack exchange,提问作者TheFallenOne
相关产品推荐
相关产品推荐

