考虑以下代码:
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.
目前您必须将
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!;
}