CsvReader.ColumnCount 始终返回 0,与 CsvReader.Parser.Count 不同

问题描述 投票:0回答:1

考虑以下代码:

var sb = new StringBuilder();
sb.Append(@"Title,Something");
sb.AppendLine();
sb.Append(@"hello world,abc");
sb.AppendLine();


using var stringReader = new StringReader(sb.ToString());
using var csvReader = new CsvReader(stringReader, CultureInfo.InvariantCulture);

int lineIndex = 0;

while (csvReader.Read())
{
    if (lineIndex == 0)
    {
        csvReader.ReadHeader();
        Debug.WriteLine($"header column count: {csvReader.ColumnCount} and {csvReader.Parser.Count}");
    }
    else
    {
        var foo = csvReader.GetRecord<Foo>();
        Debug.WriteLine($"data column count: {csvReader.ColumnCount} and {csvReader.Parser.Count}");

    }

    lineIndex++;
}

class Foo
{
    public string Title { get; set; } = null!;
    public string Something { get; set; } = null!;
}

输出:

header column count: 0 and 2
data column count: 0 and 2

我对两个零感到困惑,分别

csvReader.ColumnCount
返回0。任何人都可以解释为什么吗?文档指出“这应该与 IParser.Count 匹配”。嗯,应该,但不——但为什么呢?使用最新稳定的 CsvHelper 30.0.1.

c# csvhelper
1个回答
0
投票

目前您必须将

DetectColumnCountChanges = true
设置为
CsvConfiguration
才能从
csvReader.ColumnCount
获得正确的计数。

var sb = new StringBuilder();
sb.AppendLine(@"Title,Something");
sb.AppendLine(@"hello world,abc");

var config = new CsvConfiguration(CultureInfo.InvariantCulture){
    DetectColumnCountChanges = true
};

using var stringReader = new StringReader(sb.ToString());
using var csvReader = new CsvReader(stringReader, config);

int lineIndex = 0;

while (csvReader.Read())
{
    if (lineIndex == 0)
    {
        csvReader.ReadHeader();
        Debug.WriteLine($"header column count: {csvReader.ColumnCount} and {csvReader.Parser.Count}");
    }
    else
    {
        var foo = csvReader.GetRecord<Foo>();
        Debug.WriteLine($"data column count: {csvReader.ColumnCount} and {csvReader.Parser.Count}");

    }

    lineIndex++;
}

class Foo
{
    public string Title { get; set; } = null!;
    public string Something { get; set; } = null!;
}
© www.soinside.com 2019 - 2024. All rights reserved.