Я использую 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");
}
}