假设我有一个C#中的对象数组,我想将其写入CSV格式的文件。
假设每个对象都有一个ToString()方法,这就是我想要打印的对象。
我现在用的是这样的代码:
public static void dumpArray(Array arr, string fileName)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName))
{
foreach (Object obj in arr)
{
file.Write(obj.ToString()+",");
}
}
}
C#框架中有没有内置的东西,或者你认为有更好的方法?
6条答案
按热度按时间iyr7buue1#
使用String.Join:
但是,如果你确实在编写CSV文件,你应该使用CSV库,如File Helpers,因为CSV并不像大多数人想象的那么容易得到正确的-请参阅RFC 4180。
请注意,这里的假设是你有一个
string[]
作为第二个参数--你似乎传递了一个Array
类的示例(它不是你在问题中写的string[]
)。更新:
因为你没有**传入
string[]
,所以你应该使用File Helpers来确保对象被正确地写入CSV。icnyk63a2#
您可以更改方法以使用C#泛型并使用描述性函数和变量名。这基本上会导致相同的行为,只是避免了值类型的boxing。
编辑:要对交错数组做同样的事情(假设它们只包含 * 一 * 级嵌套),你可以使用这个重载**(不推荐,见下文!))**:
EDIT -关于重复:
当然,上面的解决方案是次优的,因为它只适用于某些特定的场景(我们只有一个嵌套级别)。不幸的是,如果重构我们的代码,我们必须停止使用泛型,因为我们的输入数组现在可能包含类型
T
或类型T[]
的元素。因此,我们提出了以下代码,这是首选的解决方案,因为尽管它重新引入了装箱,但可读性更强,冗余更少,适用于更广泛的场景:ev7lccsx3#
我相信
.csv
文件可以被视为纯文本文件.txt
。您可以轻松用途:l3zydbqr4#
你最好使用FileHelpers这样的东西:快速且易于用途:http://www.filehelpers.com/
vyswwuz25#
FileHelper
不确定Java支持的内置CSV库。
tcbh2hod6#
您也可以使用扩展方法:
然后简单地调用:
在为
IEnumerable
定义时,您也可以将其用于List<>
。