我正在使用CsvHelper并尝试根据某些属性的值映射不同的属性。
Map(m => (m.Prop1 == Enum.Setting1 || m.Prop1 == Enum.Setting2)? m.Prop2 : m.Prop3).Name("MyProperty");
这不起作用导致异常:
System.ArgumentException:不是成员访问参数名称:表达式
所以我想我会尝试创建一个新类,从我的基础对象继承,然后在映射类型中指定这些。
这种新类型在属性中直接执行此逻辑。
public class NewClassCsv : BaseClass
{
public string MyProperty
{
get { return (this.Prop1 == Enum.Setting1 || this.Prop1 == Enum.Setting2) ? this.Prop2 : this.Prop3; }
}
我尝试使用这个新类作为我的地图类型,但进入助手的 WriteRecords 方法的对象是基本类型,这不会进行强制转换来更改它。
所以我试着在映射上做演员:
Map(x => ((NewClassCsv)x).MyProperty);
这也不起作用,也没有找到对象上的属性。
任何人都遇到过这个并知道如何解决它?
编辑:自定义映射器部分
csvWriter.Configuration.RegisterClassMap<CustomMap>();
public class CustomMap: CsvClassMap<NewClassCsv>
{
public override void CreateMap()
{
Map(m => m.MyProperty).Name("MyProperty");
}
}