Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CsvHelper:保存地图值​;对一个变量_C# - Fatal编程技术网

C# CsvHelper:保存地图值​;对一个变量

C# CsvHelper:保存地图值​;对一个变量,c#,C#,我正在尝试编写一个.csv文件,其中DateTimeArrivalDate类型字段必须根据交易对手字段进行格式化,就像我尝试使用下面的FormatDate函数一样。但是,我不能将值保存在变量中,作为参数传递给前面提到的函数 public class FuturesFilesMapping : BaseTypeConfiguration<FuturesFilesModel> { public FuturesFilesMapping() {

我正在尝试编写一个.csv文件,其中DateTime
ArrivalDate
类型字段必须根据
交易对手
字段进行格式化,就像我尝试使用下面的
FormatDate
函数一样。但是,我不能将
值保存在变量中,作为参数传递给前面提到的函数

public class FuturesFilesMapping : BaseTypeConfiguration<FuturesFilesModel>
    {
        public FuturesFilesMapping()
        {
            var counterparty = Map(i => i.Counterparty).Constant("counterparty");

            Map(i => i.TradeDate).Name("Trade Date").Index(1).TypeConverterOption.Format("dd/MM/yyyy");
            Map(i => i.BmfAccount).Name("A/C Ref").Index(2);
            Map(i => i.Side).Name("B/S").Index(3);
            Map(i => i.Quantity).Name("Lots").Index(4);
            Map(i => i.Strike).Name("Strike").Index(5);
            Map(i => i.Type).Name("Type").Index(6);
            Map(i => i.Payout).Name("Call/Put").Index(7);
            Map(i => i.Price).Name("Price").Index(8);
            Map(i => i.Ticker).Name("Ric").Index(9);
            Map(i => i.Broker).Name("Exec Firm Name").Index(10);
            Map(i => i.Counterparty).Name("Contraparte").Index(11);
            Map(i => i.Desk).Name("Mesa").Index(12);
            Map(i => i.Exchange).Name("Exchange").Index(13);
            Map(i => i.ArrivalDate, ).Name("delivery").Index(14).TypeConverterOption.Format(FormatDate(counterparty));
            Map(i => i.Currency).Name("Curr").Index(15);
            Map(i => i.ContractId).Name("Age").Index(16);
        }

        public static string FormatDate(string couterparty)
        {
            if (couterparty.Equals("FCM CITIGROUP GLOBAL MARKETS INC"))
            {
                return "MMM-yy";
            }
            else
            {
                return "dd MMM yyy";
            }
        }
    }
公共类未来文件映射:BaseTypeConfiguration
{
公共未来文件映射()
{
var交易对手=Map(i=>i.交易对手)。常数(“交易对手”);
Map(i=>i.TradeDate).Name(“交易日期”).Index(1).TypeConverterOption.Format(“dd/MM/yyyy”);
图(i=>i.BmfAccount)。名称(“A/C参考”)。索引(2);
地图(i=>i.Side).名称(“B/S”).索引(3);
地图(i=>i.Quantity)。名称(“批次”)。索引(4);
地图(i=>i.Strike).Name(“Strike”).Index(5);
映射(i=>i.Type).Name(“Type”).Index(6);
Map(i=>i.Payout).Name(“Call/Put”).Index(7);
地图(i=>i.Price).Name(“Price”).Index(8);
地图(i=>i.Ticker).Name(“Ric”).Index(9);
Map(i=>i.Broker).Name(“执行公司名称”).Index(10);
Map(i=>i.交易对手)。名称(“对方”)。索引(11);
地图(i=>i.Desk).名称(“Mesa”).索引(12);
Map(i=>i.Exchange).Name(“Exchange”).Index(13);
Map(i=>i.ArrivalDate,).Name(“delivery”).Index(14).TypeConverterOption.Format(formattate(对方));
地图(i=>i.Currency).Name(“Curr”).Index(15);
地图(i=>i.construcd).姓名(“年龄”).索引(16);
}
公共静态字符串FormatDate(字符串参与方)
{
if(couterparty.Equals(“FCM花旗集团全球市场公司”))
{
返回“MMM-yy”;
}
其他的
{
返回“dd-MMM-yyy”;
}
}
}

有人能告诉我是否可以在映射类中执行此条件格式设置吗?

您可以使用
TypeConverter

Map(m => m.ArrivalDate, ).Name("delivery").Index(14).TypeConverter<MyDateConverter>();

映射仅在配置期间进行,我假设
couterparty
在数据的每一行上可以不同,对吗?是的,它可以不同,但并不总是如此。发布您如何编写csv文件。我应该在映射中放置什么类型的MyDateConvert?实际上,由于函数call中缺少类型,映射中出现错误。因此,我可以返回以下错误消息(不是很解释):“发生了意外错误。”您是否尝试调试MyDateConverter?程序甚至没有进入类。
public class MyDateConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        if (row.GetField("Contraparte").Equals("FCM CITIGROUP GLOBAL MARKETS INC"))
            return DateTime.ParseExact(text, "MMM-yy", System.Globalization.CultureInfo.InvariantCulture) );

        return DateTime.ParseExact(text,  "dd MMM yyy", System.Globalization.CultureInfo.InvariantCulture) );
    }

    public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
    {
        throw new NotImplementedException();
    }
}