【问题标题】:Write list to csv file c#将列表写入csv文件c#
【发布时间】:2015-07-27 12:05:17
【问题描述】:

想象一下,我有 2 个充满值的列表。我希望将第一个列表中的所有元素写入第一列,将第二个列表中的所有元素写入第二列,依此类推。

如果两个列表的大小相同,则可以正常工作:

 for (int i = 0; i < valueArray.Count(); i++)
 {
      var newLine = string.Format("{0},{1}", valueArray.ElementAt(i), secondValueArray.ElementAt(i));
      sw.Write(newLine);
 }

我的问题是,如果列表的大小不同,代码显然会出现超出范围的异常。我尝试在列之间添加“,”,但它不起作用。

【问题讨论】:

  • 您需要检查其中一个列表的长度是多少,并查看它是否与您的 for 循环中的变量 I 相同。如果没有,请继续写该列,否则不要。
  • 你可以用空格填充每个列表,使它们的长度相同,然后执行你已经完成的操作。
  • 用空白或 -1 值填充它不是一个选项,因为它可能会使用户迷失方向。
  • 您的列表属于哪种类型?
  • 只是一个带有 int 值的简单 ArrayList。

标签: c# csv io


【解决方案1】:

您应该使用ElementAtOrDefault 而不是ElementAt

msdn

返回序列中指定索引处的元素或默认值 索引超出范围时的值。

【讨论】:

  • 这不是同一个解决方案。列表内容保持不变,当您填写列表时情况并非如此。
  • @ZackBogdan 你到底想要什么?
  • ElementAtOrDefault 有效,但默认值为 0,其余值填充为 0。如何将默认值更改为“”?
  • 我刚刚写了自己的扩展方法,默认值为""。谢谢w.b & all。 static String ElementAtOrDefault(List list, int index, String defaultValue) { return index >= 0 && index
【解决方案2】:

试试这个:

List<int?> valueArray = new List<int?>();
List<int?> secondValueArray = new List<int?>();

//... fill lists
valueArray.Add( 1 );
valueArray.Add(2);
valueArray.Add(3);

secondValueArray.Add( 4 );

while (valueArray.Count > secondValueArray.Count)
    secondValueArray.Add(null);

while (secondValueArray.Count > valueArray.Count)
    valueArray.Add(null);

for (int i = 0; i < valueArray.Count(); i++)
{
    var newLine = string.Format("{0},{1}", valueArray.ElementAt(i), secondValueArray.ElementAt(i));
    Console.WriteLine(newLine);
}

;

结果:

1,4
2,
3,

【讨论】:

    【解决方案3】:

    如前所述,使用 ElementAtOrDefault()。并检查哪个数组是最长的。此外,如果没有值,您可能想写一个空字符串而不是 NULL。

     int count = Math.Max(firstArray.Count(), secondArray.Count());
    
     for (int i = 0; i < count; i++)
     {
          var value1 = firstArray.ElementAtOrDefault(i) ?? String.Empty;
          var value2 = secondArray.ElementAtOrDefault(i) ?? String.Empty;
    
          var newLine = string.Format("{0},{1}", value1, value2);
          sw.Write(newLine);
     }
    

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 2014-06-30
      • 2019-09-02
      相关资源
      最近更新 更多