【问题标题】:Reading CSV with optional column using CsvHelper使用 CsvHelper 读取带有可选列的 CSV
【发布时间】:2019-04-12 15:52:47
【问题描述】:

我想读取一个包含一些可选列的 CSV 文件,因为我已经使用“?”定义了一个具有可选属性的类。但不能让它工作。

public class MyItem
{
    public int Id { get; set; }
    public int? MyValue { get; set; }
}

映射类:

public sealed class MyItemMap : ClassMap<MyItem>
{
    public MyItemMap()
    {
        Map(m => m.Id);
        Map(m => m.MyValue);
    }
}

然后是控制台应用程序:

static void Main(string[] args)
{
    using (var reader = new StreamReader(@"C:\Test2Delete\ConsoleAppCSV\MyItem.csv"))
    using (var csv = new CsvReader(reader))
    {
        csv.Configuration.RegisterClassMap(new MyItemMap());
        csv.Configuration.HeaderValidated = null;
        try
        {
            var records = csv.GetRecords<MyItem>();
            foreach (var r in records)
            {
                Console.WriteLine(r.Id + " " + r.MyValue);
            }

            Console.ReadLine();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Console.ReadLine();
        }
    }
}
}

所以我希望能够读取包含“Id”、“MyValue”列的文件以及仅包含“Id”列的文件。我怎样才能做到这一点?

【问题讨论】:

  • 请添加语言标签,这样不仅是您正在使用的库,还包括所涉及的语言。

标签: c# csvhelper


【解决方案1】:

MyValue 设置为可选。

public sealed class MyItemMap : ClassMap<MyItem>
{
    public MyItemMap()
    {
        Map(m => m.Id);
        Map(m => m.MyValue).Optional();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多