Следует избегать использования конкатенации строк, где это возможно. Строки неизменяемы, поэтому конкатенация строк создает новые временные строки, которые впоследствии нужно собрать мусором. Это может быть серьезной проблемой, если вы регулярно выполняете множество операций с строками.
Вы можете использовать String.Join и String.Forma т для создания строки с разделителями из списка значений, как это:
var newItems = new [] {"one", "two"};
var a = String.Join(", ",newItems.Select(c => String.Format("\"{0}\"",c)));
Это создает временные строки, хотя они намного меньше, чем раньше.
Вы также можете использовать StringBuilder и агрегированный для создания одной строки и избежать каких-либо временных строк, хотя код выглядит немного уродливый:
var builder = new StringBuilder();
var b1 = (newItems.Aggregate(builder,
(bld, c) => bld.AppendFormat("\"{0}\",", c),
bld => bld.Remove(bld.Length - 1, 1))
).ToString();
или даже
var b2 = newItems.Aggregate(builder2,
(bld, c) => bld.AppendFormat("\"{0}\",", c),
bld => bld.Remove(bld.Length - 1, 1).ToString());
Если вам нужно чтобы использовать такой код во многих местах, было бы лучше скрыть всю конструкцию в методе расширения:
public static string JoinFormat<T>(this IEnumerable<T> items,string format)
{
var builder = new StringBuilder();
var result = (items.Aggregate(builder,
(bld, c) => bld.AppendFormat(format, c),
bld => bld.Remove(bld.Length - 1, 1))
).ToString();
return result;
}
и написать:
var a=newItems.JoinFormat("\"{0}\"");
На самом деле ваш код возвращает ' "один \" два \ ""' ... в любом случае, это правильное положение, где вы должны использовать 'string.join ("", newItems. Выберите (x => "\" "+ x +" \ "")) ' – digEmAll
@digEmВсе прочитайте это как ответ. –
@digEmAll Опубликуйте свой комментарий, и я считаю его правильным! – BotanMan