1

私は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");
    }
}
4

1 に答える 1