We produce data in comma delimited strings. So as part of a tool we are writing, I wrote a simple loop to output a list of objects with commas between items.
public void Wrong_CommaSeperatedWriteLine(TextWriter sw, params Object[] list)
{
if (list.Length > 0)
{
object last = list[list.Length - 1];
foreach (Object obj in list)
{
sw.Write(obj);
if (obj != last)
{
sw.Write(",");
}
}
sw.WriteLine();
}
}
Which we found today would fail when called like this:
Wrong_CommaSeperatedWriteLine(sw, "one", 2, "one");
but not this:
Wrong_CommaSeperatedWriteLine(sw, 2, 2, "one");
as the immutable strings references are the same. So while trying to think of how to avoid using a for(int i solution, I typed comma into MSDN and what do you know, CommaDelimitedStringCollection Class
is there already. Doh!
So my code becomes:
public void CommaSeperatedWriteLine(TextWriter sw, params Object[] list)
{
if (list.Length > 0)
{
System.Configuration.CommaDelimitedStringCollection commaStr = new System.Configuration.CommaDelimitedStringCollection();
foreach (Object obj in list)
{
commaStr.Add(obj.ToString());
}
sw.WriteLine(commaStr.ToString());
}
}
Gosh darn, large Libraries that solve all the simple problems (correctly) already.
There is an AddRange method but it takes a array of strings, and I have a array of objects, and I’m not sure how to auto-magic convert the arrays from one to the other. Any suggestions?
CommaDelimitedStringCollection
is in the System.Configuration
namespace which has to be added as a reference. There are lot of interesting classes in this namespace that I have never reviewed. Time to do some browsing…