У меня есть две Delimit
функции, которые делают это для меня.
Они занимают очень мало места: второй массив не создается, а при возвращении строки используется StringBuilder под обложками, поэтому он не копирует и не объединяет одну и ту же строку, вызывая более длительные задержки конкатенации.
Как таковые, они полезны для серий очень большой и / или неизвестной длины.
Фрист пишет в TextWriter и ничего не возвращает, вторая возвращает строку и делегирует первой передаче в StringWriter.
public static void Delimit<T>(this IEnumerable<T> me, System.IO.TextWriter writer, string delimiter)
{
var iter = me.GetEnumerator();
if (iter.MoveNext())
writer.Write(iter.Current.ToString());
while (iter.MoveNext())
{
writer.Write(delimiter);
writer.Write(iter.Current.ToString());
}
}
public static string Delimit<T>(this IEnumerable<T> me, string delimiter)
{
var writer = new System.IO.StringWriter();
me.Delimit(writer, delimiter);
return writer.ToString();
}
Таким образом, учитывая цены выше, вы бы
decimal[] prices = { 39.99M, 29.99m, 29.99m, 19.99m, 49.99m };
Console.WriteLine("the prices are {0}", prices.Delimit(", "));
или
decimal[] prices = { 39.99M, 29.99m, 29.99m, 19.99m, 49.99m };
Console.Write("the prices are ")
prices.Delimit(System.Console.Out, ", ");
Console.WriteLine();