вы может использовать метод string.Join
, чтобы сделать что-то вроде string.Join(",", o.Number, o.Id, o.whatever, ...)
.
Редактировать: Как digEmAll сказал, string.Join быстрее, чем StringBuilder. Они используют внешнюю реализацию для string.Join.
Профилирование кода (конечно пробег в версии без отладочных символов):
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
string r;
int iter = 10000;
string[] values = { "a", "b", "c", "d", "a little bit longer please", "one more time" };
sw.Restart();
for (int i = 0; i < iter; i++)
r = Program.StringJoin(",", values);
sw.Stop();
Console.WriteLine("string.Join ({0} times): {1}ms", iter, sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < iter; i++)
r = Program.StringBuilderAppend(",", values);
sw.Stop();
Console.WriteLine("StringBuilder.Append ({0} times): {1}ms", iter, sw.ElapsedMilliseconds);
Console.ReadLine();
}
static string StringJoin(string seperator, params string[] values)
{
return string.Join(seperator, values);
}
static string StringBuilderAppend(string seperator, params string[] values)
{
StringBuilder builder = new StringBuilder();
builder.Append(values[0]);
for (int i = 1; i < values.Length; i++)
{
builder.Append(seperator);
builder.Append(values[i]);
}
return builder.ToString();
}
}
string.join взял 2ms на моей машине и StringBuilder.Append 5мс. Поэтому есть заметная разница. Спасибо digAmAll за подсказку.
Вообще говоря, считается, что менее эффективно конкатенировать строки символом '+'. Это создает больше объектов для сбора мусора. –
[Ручное разделение запятой по сравнению с классным классом CommaDelimitedStringCollection!] (Http://izlooite.blogspot.com/2009/12/manual-comma-separation-versus-cool.html) –