C# Csv Helper Fluent类映射在映射到字符串属性时添加一个前导零到整数字段

C# Csv Helper Fluent类映射在映射到字符串属性时添加一个前导零到整数字段,c#,csv,csvhelper,leading-zero,C#,Csv,Csvhelper,Leading Zero,我有一个名为TimeClockCode的字符串属性。它被映射到csv文件的索引(0)。索引(0)包含11565等整数。但是在映射到字符串时钟代码之后 像这样: Map(p=>p.TimeclockCode).Index(0) 或者像这样: Map(p=>p.TimeclockCode).ConvertUsing(row=>row.GetField(0)) 这两个结果都是字符串011565 我把它读作int并调用toString来解决这个问题 Map(p=>p.TimeclockCode).Con

我有一个名为TimeClockCode的字符串属性。它被映射到csv文件的索引(0)。索引(0)包含11565等整数。但是在映射到字符串时钟代码之后

像这样:
Map(p=>p.TimeclockCode).Index(0)

或者像这样:
Map(p=>p.TimeclockCode).ConvertUsing(row=>row.GetField(0))

这两个结果都是字符串011565

我把它读作int并调用toString来解决这个问题

Map(p=>p.TimeclockCode).ConvertUsing(row=>row.GetField(0.ToString())
这给了我11565的期望结果

我是否遗漏了一些关于fluent映射实现的内容?
前导零从哪里来?

我无法复制您的问题。我使用了以下代码:

static void Main(string[] args)
{
    var s = "\"11565\",\"a\",\"012\",\"4.5\",\"01\",\"555\"\r\n";
    using (var sr = new StringReader(s))
    {
        var csv = new CsvReader(sr);
        csv.Configuration.HasHeaderRecord = false;
        csv.Configuration.RegisterClassMap<MyClassMap>();
        while (csv.Read())
        {
            var record = csv.GetRecord<MyClass>();

        }
    }
}

public class MyClass
{
    public string Test { get; set; }
    public string TimeclockCode { get; set; }
}

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map(p => p.TimeclockCode).Index(0);
        Map(p => p.Test).Index(2);
    }
}
static void Main(字符串[]args)
{
var s=“\“11565\”、“a\”、“012\”、“4.5\”、“01\”、“555\”\r\n”;
使用(var sr=新的StringReader)
{
var csv=新的CsvReader(sr);
csv.Configuration.HasHeaderRecord=false;
csv.Configuration.RegisterClassMap();
而(csv.Read())
{
var record=csv.GetRecord();
}
}
}
公共类MyClass
{
公共字符串测试{get;set;}
公共字符串时钟代码{get;set;}
}
公共密封类MyClassMap:CsvClassMap
{
公共MyClassMap()
{
Map(p=>p.TimeclockCode).Index(0);
Map(p=>p.Test)。指数(2);
}
}

我只能假设CSV中的值为011565,或者您有其他问题,这些问题在问题文本中并不明显。

我无法复制您的问题。我使用了以下代码:

static void Main(string[] args)
{
    var s = "\"11565\",\"a\",\"012\",\"4.5\",\"01\",\"555\"\r\n";
    using (var sr = new StringReader(s))
    {
        var csv = new CsvReader(sr);
        csv.Configuration.HasHeaderRecord = false;
        csv.Configuration.RegisterClassMap<MyClassMap>();
        while (csv.Read())
        {
            var record = csv.GetRecord<MyClass>();

        }
    }
}

public class MyClass
{
    public string Test { get; set; }
    public string TimeclockCode { get; set; }
}

public sealed class MyClassMap : CsvClassMap<MyClass>
{
    public MyClassMap()
    {
        Map(p => p.TimeclockCode).Index(0);
        Map(p => p.Test).Index(2);
    }
}
static void Main(字符串[]args)
{
var s=“\“11565\”、“a\”、“012\”、“4.5\”、“01\”、“555\”\r\n”;
使用(var sr=新的StringReader)
{
var csv=新的CsvReader(sr);
csv.Configuration.HasHeaderRecord=false;
csv.Configuration.RegisterClassMap();
而(csv.Read())
{
var record=csv.GetRecord();
}
}
}
公共类MyClass
{
公共字符串测试{get;set;}
公共字符串时钟代码{get;set;}
}
公共密封类MyClassMap:CsvClassMap
{
公共MyClassMap()
{
Map(p=>p.TimeclockCode).Index(0);
Map(p=>p.Test)。指数(2);
}
}


我只能假设CSV中的值为011565,或者您有一些其他问题,这些问题在问题文本中并不明显。

类中如何定义时钟代码?我正在查看文档,没有发现您共享的内容有任何错误。
public string TimeclockCode{get;set;}
您确定CSV行不包含字符串011565吗?看起来怎么样?我将尝试在代码中重新创建它。该行仅包含11565。将其映射到字符串属性时,将添加0,除非我将其作为int拉入,然后对其调用toString()。似乎.Index()将其读取为int,然后尝试将其转换为字符串以映射到我的属性,然后在某个地方添加了一个0。能否重新创建一个包含此内容的小示例?或者至少发布失败的CSV行。类中如何定义TimeclockCode?我正在查看文档,没有发现您共享的内容有任何错误。
public string TimeclockCode{get;set;}
您确定CSV行不包含字符串011565吗?看起来怎么样?我将尝试在代码中重新创建它。该行仅包含11565。将其映射到字符串属性时,将添加0,除非我将其作为int拉入,然后对其调用toString()。似乎.Index()将其读取为int,然后尝试将其转换为字符串以映射到我的属性,然后在某个地方添加了一个0。能否重新创建一个包含此内容的小示例?或者至少发布失败的CSV行。还有什么比这更奇怪的呢,如果我用int和string
FakeReader r=new FakeReader();var arr=r.ResultList.ToArray();arr[0]。时钟代码。应与(11565)等效;arr[0]。时钟代码。应等效于(“11565”);}两个测试都是绿色的,但是值呢?是“011565”还是“11565”?我的代码和你的代码有何不同?我在记事本中打开文件,看到值实际上是“011565”,excel隐藏了零。但是为什么
row.GetField(0).ToString()
删除前导零?因为GetField接受值“011565”并将其转换为整数(因为您要求它),然后将其转换为字符串,从而变成“11565”。还有什么比这更奇怪的呢,如果我用int和string对代码进行测试,那么将代码放入测试结果true
FakeReader r=new FakeReader();var arr=r.ResultList.ToArray();arr[0]。时钟代码。应与(11565)等效;arr[0]。时钟代码。应等效于(“11565”);}两个测试都是绿色的,但是值呢?是“011565”还是“11565”?我的代码和你的代码有何不同?我在记事本中打开文件,看到值实际上是“011565”,excel隐藏了零。但是为什么
row.GetField(0).ToString()
会删除前导零?因为GetField接受值“011565”并将其转换为整数(因为您要求它),然后将其转换为字符串,从而成为“11565”。