Генерация запятой разделенные значения

ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

включение ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ заливки столбец в существующий строки со значением по умолчанию, таким образом, ограничение NOT NULL не нарушено.

9
задан Adrian Godong 7 August 2009 в 14:52
поделиться

7 ответов

String.Join - правильный ответ, но в случае IEnumerable Linq часто короче, чем цикл for:

someStringCollection.Aggregate((first, second) => first + ", " + second);
4
ответ дан 4 December 2019 в 06:22
поделиться

Вы хотите использовать метод string.Join , который существует в BCL для этой цели.

Пример:

var myArray = new string[] { "one", "two", "three" };
var output = string.Join(", ", myArray);

Или если вы используете. NET 3.5, вы можете сделать это с любым IEnumerable как таковым:

var output = string.Join(", ", myEnumerable.ToArray());

(Обратите внимание, что это не дает наилучшей производительности, как требуется, хотя явно по-прежнему 'O (n) ', и должен подходить почти для всех случаев).

Теперь, если ваш enumerable не относится к типу string (обычно IEnumerable ), вы можете просто использовать метод Select для преобразования результата в строку, например

var output = string.Join(", ", myEnumerable.Select(e => e.ToString()).ToArray());

Я не уверен, имеете ли вы дело со значениями, которые потенциально могут содержать запятые сами по себе, но это можно обойти, заключив их в кавычках ( ") и экранирование кавычек,аналогично формату CSV.

var output = string.Join(", ", items.Select(x => x.Contains(",") ?
    "\"" + x.Replace("\"", "\"\"") + "\"" : x);

Конечно, их повторное разделение - задача немного более сложная, требующая небольшого количества регулярных выражений.

26
ответ дан 4 December 2019 в 06:22
поделиться

Как другие сказали: Строка. Присоединиться к - это обычно лучший способ сделать это. Но что, если у вас есть IEnumerable, а не массив? Возможно, у вас есть код для их перечисления при чтении их из файла с использованием отложенного выполнения. В этом случае String.Join не так хорош, потому что вам нужно дважды перебирать строки - один раз для создания массива и один раз для присоединения к нему. В этом случае вам нужно что-то вроде этого:

public static string ToDelimitedString(this IEnumerable<string> source, string delimiter)
{
    string d = "";
    var result = new StringBuilder();

    foreach( string s in source)
    {
       result.Append(d).Append(s);
       d = delimiter;
    } 
    return result.ToString();
}

Это будет выполнять почти , а также String.Join, и работает в более общем случае. Затем, учитывая массив строк или любой другой IEnumerable, вы можете назвать его так:

string finalStr = MyStrings.ToDelimitedString(",");
4
ответ дан 4 December 2019 в 06:22
поделиться
string finalstr = String.Join(",", strs);
3
ответ дан 4 December 2019 в 06:22
поделиться

Используйте

string s = string.Join (",", new string[] {"aaa", "bbb", "ccc"});
2
ответ дан 4 December 2019 в 06:22
поделиться

Используйте String.Join

0
ответ дан 4 December 2019 в 06:22
поделиться

Если у вас есть массив строк, используйте Noldorin .

Но если это какой-то другой тип коллекции, я мог бы сделать это:

if (strs.Count() > 0)
{
  var sb = new StringBuilder();
  foreach (var str in strs)
    sb.AppendFormat("{0} {1}", (0 == sb.Length ? "" : ","), str);
  return sb.ToString();
}
0
ответ дан 4 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: