C# 移除或禁用';不要写最后一个';行中的符号

C# 移除或禁用';不要写最后一个';行中的符号,c#,csv,export,C#,Csv,Export,我已经导出到CSV脚本 我导出结构的列表。我在StringWriter的帮助下写作。在每个循环的结构域数组中,我遍历所有属性,并在每个属性之后放置“;”。在这行的末尾,我放了WriteLine() 因此,作为输出,我有: value1;value2;value3; 我想: value1;value2;value3 问题是:如何从我得到的东西中得到我想要的,或者基于我已经取得的东西 我现在有3个想法: 行中的最后两个符号应该类似“;\r(\n)”所以将此组合替换为零 检查属性是否为最后一个 修

我已经导出到CSV脚本

我导出结构的列表。我在StringWriter的帮助下写作。在每个循环的结构域数组中,我遍历所有属性,并在每个属性之后放置“;”。在这行的末尾,我放了WriteLine()

因此,作为输出,我有:

value1;value2;value3;
我想:

value1;value2;value3
问题是:如何从我得到的东西中得到我想要的,或者基于我已经取得的东西

我现在有3个想法:

  • 行中的最后两个符号应该类似“;\r(\n)”所以将此组合替换为零
  • 检查属性是否为最后一个
  • 修剪每行中最后一个(换行前)符号
  • 试试这个代码

    str.TrimEnd(';');
    

    使用String.Join形成输出的每一行。它可以避免您必须检查哪个术语是最后一个术语

    线路将是

    "value1;value2;value3"
    

    通常我只是在行形成后删除最后一个字符。

    我使用
    StringBuilder
    ,只需执行以下操作:

    var builder = new StringBuilder();
    // ...
    // add the text
    // ...
    builder.Length--;
    

    这样我可以避免字符串复制。

    -1-删除最后一个字符将再次创建整个字符串,最好使用
    string。Join()
    StringBuilder不会再次创建整个字符串,但您的解决方案更好。不错,但对于大字符串来说有问题,因为它会导致复制。
    var builder = new StringBuilder();
    // ...
    // add the text
    // ...
    builder.Length--;