繁体   English   中英

将列表写入CSV文件C#

[英]Write list to csv file c#

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

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

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

我的问题是,如果列表的大小不同,则代码显然会失败,并出现超出范围的异常。 我尝试在列之间添加“,”,但无法正常工作。

代替ElementAt您应该使用ElementAtOrDefault

msdn

返回序列中指定索引处的元素,如果索引超出范围,则返回默认值。

尝试这个 :

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,

如前所述,使用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);
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM