4

LinqToCSV 似乎在空字符串周围添加引号是否有设置将其关闭?在文档中找不到任何内容。还尝试发送空值而不是空字符串..结果相同

这是使用 LinqToCSV 生成的示例 CSV 输出。第 5、6、7 列是空字符串。它们在最终的 CSV 输出中被引用字符串

3223,2876,5591,9171068,"","","",10000442,A1,"",012000016431,2.50,8,0,8,20150108224612 3223,2876,5591,9171068,"",""," ",10000442,A2,"",012000016431,2.50,8,0,8,20150108224612 3223,2876,5591,9171068,"","","",10000442,A3,"",012000043000,1.75,8, 0,8,20150108224612 3223,2876,5591,9171068,"","","",10000442,A4,"",012000043000,1.75,8,0,8,20150108224612 3223,2876,5591,9171068,"" ,"","",10000442,A5,"",012000043000,1.75,8,0,8,20150108224612 3223,2876,5591,9171068,"","","",10000442,A6,"",012000110467 ,1.75,8,0,8,20150108224612

这是供参考的示例代码

CsvFileDescription fd = new CsvFileDescription();
fd.FirstLineHasColumnNames = false;
fd.QuoteAllFields = false;
fd.EnforceCsvColumnAttribute = true;            
fd.SeparatorChar = Globals.Separator[0];

CsvContext cc = new CsvContext();
cc.Write(data, txtFileName, fd);

数据的所有属性都是纯字符串

例如,其中一列定义为

[CsvColumn(FieldIndex = 16, CanBeNull = true)]
public string TimeStamp { get; set; }
4

1 回答 1

1

从LinqToCsv v1.5起,此行为不可重现。当我将TimeStamp字段的值设置为 时null,该值不被引用。然而,一个值String.Empty被引用。

考虑以下:

void Main()
{
    var fd = new CsvFileDescription();
    fd.FirstLineHasColumnNames = false;
    fd.QuoteAllFields = false;
    fd.EnforceCsvColumnAttribute = true;
    fd.SeparatorChar = ',';

    var txtFileName = @"C:\temp\linqtocsv.csv";
    var data = new[] { new Data { TimeStamp = null, Foo = null, Bar = "" } };
    var cc = new CsvContext();
    cc.Write(data, txtFileName, fd);
}

class Data
{
    [CsvColumn(FieldIndex = 0, CanBeNull = true)]
    public string TimeStamp { get; set; }
    [CsvColumn(FieldIndex = 1, CanBeNull = true)]
    public string Foo { get; set; }
    [CsvColumn(FieldIndex = 2, CanBeNull = true)]
    public string Bar { get; set; }
}

输出的文件内容为:

,,""

您可以使用此 LinqPad 查询自己尝试。

于 2016-04-14T19:39:04.493 回答