CSVHelper无法将空浮点值转换为字符串

问题描述

我有一个csv文件,其中包含整数,字符串,布尔和浮点类型的数据。问题是,某些字段为空。当我尝试使用csvhelper读取csv文件时,出现TypeConversion.TypeConverterException错误。我检查了细节,看起来像是因为它无法将空float值转换为字符串。我该如何处理?

namespace Smh
{
    class Program
    {
        static void Main(string[] args)
        {
            List<E> EList = new List<E>();
            List<E2> EList2 = new List<E2>();

            string filePath = @"D:\Visual Studio\Projects\Example\boo.csv";

            using (var reader = new StreamReader(filePath))
            using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
            {
                var example= new E();
                EList= csv.GetRecords<E>().ToList();
            }
.
.
.

“ E”类的一部分:

.
.
 public float weight { get; set; }
.
.

和我得到的错误https://i.postimg.cc/dVPkYDCm/image.png

csv文件的一小部分:

id | speed | type | weight
1     40     type1   5.4
2     43     type2
3     16     type3   5.2 

解决方法

最简单的解决方案,无需使用ClassMap自定义映射器, 是将类型更改为float?

public class Test{
    public int id{get;set;}
    public int speed{get;set;}
    public string type{get;set;}
    public float? weight{get;set;}
}

然后,如果您需要更改默认值,则可以添加将返回Single.NaN

的Getter Setter。

示例: Live Demo

public static void Main()
{
    var result = new List<Test>();
    using (var stream = new MemoryStream())
    using (var writer = new StreamWriter(stream))
    using (var reader = new StreamReader(stream))
    using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
    {
        //Csv Creation
        writer.WriteLine("id,speed,type,weight");
        writer.WriteLine("1,40,type1,5.4");
        writer.WriteLine("2,43,type2,");
        writer.WriteLine("3,16,type3,5.2");
        writer.Flush();
        stream.Position = 0;
        
        
        csv.Configuration.HasHeaderRecord = true;
        csv.Configuration.Delimiter = ",";
        
        result = csv.GetRecords<Test>().ToList();           
        
    }
    result.Dump();
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...