在 C# 中创建逗号分隔的字符串
我有一个包含许多值的对象,其中一些值(并非对象中的所有值)需要放入 CSV 字符串。我的方法是这样的:
string csvString = o.number + "," + o.id + "," + o.whatever ....
有没有更好、更优雅的方法?
I have an object which holds many values, and some of them (not all values from the object) need to be put in a CSV string. My approach was this:
string csvString = o.number + "," + o.id + "," + o.whatever ....
Is there is a better, more elegant way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果将所有值放入一个数组中,至少可以使用 string.Join。
您还可以使用
string.Join
的重载,将params string
作为第二个参数,如下所示:If you put all your values in an array, at least you can use
string.Join
.You can also use the overload of
string.Join
that takesparams string
as the second parameter like this:另一种方法是使用 System.Configuration 命名空间/程序集中的 CommaDelimitedStringCollection 类。它的行为类似于列表,而且它有一个重写的 ToString 方法,该方法返回一个以逗号分隔的字符串。
优点 - 比数组更灵活。
缺点 - 您不能传递包含逗号的字符串。
Another approach is to use the CommaDelimitedStringCollection class from System.Configuration namespace/assembly. It behaves like a list plus it has an overriden ToString method that returns a comma-separated string.
Pros - More flexible than an array.
Cons - You can't pass a string containing a comma.
您可以使用
string.Join
< /a> 方法执行诸如string.Join(",", o.Number, o.Id, o.whatever, ...)
之类的操作。编辑:正如 digEmAll 所说, string.Join 比 StringBuilder 更快。他们使用 string.Join 的外部实现。
分析代码(当然在没有调试符号的版本中运行):
string.Join 在我的机器上花费了 2 毫秒,而 StringBuilder.Append 花费了 5 毫秒。因此,存在显着差异。感谢 digAmAll 的提示。
You can use the
string.Join
method to do something likestring.Join(",", o.Number, o.Id, o.whatever, ...)
.edit: As digEmAll said, string.Join is faster than StringBuilder. They use an external implementation for the string.Join.
Profiling code (of course run in release without debug symbols):
string.Join took 2ms on my machine and StringBuilder.Append 5ms. So there is noteworthy difference. Thanks to digAmAll for the hint.
如果您使用的是 .NET 4,则可以使用
string.Join
的重载,该重载采用 IEnumerable(如果列表中也有它们):If you're using .NET 4 you can use the overload for
string.Join
that takes an IEnumerable if you have them in a List, too:您可以重写对象的 ToString() 方法:
You could override your object's ToString() method:
是的,可以有多种方法来做到这一点。
如果您有
字符串
的列表/数组
,那么您可以采用它;如果你有多个
字符串
那么你可以采用它;Yes, there can be multiple ways to do this.
If you have
List/Array
ofstrings
then you can adopt it;If you have multiple
strings
then you can adopt it;