使用CsvHelper将CSV编号列映射到数组时报找不到成员如何解决
问题原因
你遇到的异常确实由数组索引写法导致:CsvHelper的ClassMap映射表达式要求必须指向类的属性/字段成员,Leds[0]属于索引器调用,无法被反射解析为可映射的有效成员,因此会抛出找不到成员的错误。
解决方案
最直接的实现方式是使用Convert(低版本CsvHelper用ConvertUsing)方法一次性读取所有LED列,赋值给数组:
public class EyeExcitation { public int Dt { get; set; } public double[] Leds { get; set; } = new double[6]; } sealed class EyeExcitationMap : ClassMap<EyeExcitation> { public EyeExcitationMap() { Map(m => m.Dt).Name("Dt"); // 手动映射所有LED列到数组 Map(m => m.Leds).Convert(args => { return new double[6] { args.Row.GetField<double>("LED1 R"), args.Row.GetField<double>("LED2 R"), args.Row.GetField<double>("LED3 R"), args.Row.GetField<double>("LED4 R"), args.Row.GetField<double>("LED5 R"), args.Row.GetField<double>("LED6 R") }; }); } }
如果你的CSV中LED列命名逻辑完全统一,也可以通过循环减少重复代码:
public EyeExcitationMap() { Map(m => m.Dt).Name("Dt"); Map(m => m.Leds).Convert(args => { var leds = new double[6]; for (int i = 0; i < 6; i++) { leds[i] = args.Row.GetField<double>($"LED{i+1} R"); } return leds; }); }
内容的提问来源于stack exchange,提问作者Maxime Charrière
相关产品推荐
相关产品推荐

