ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
включение ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ заливки столбец в существующий строки со значением по умолчанию, таким образом, ограничение NOT NULL не нарушено.
String.Join - правильный ответ, но в случае IEnumerable Linq часто короче, чем цикл for:
someStringCollection.Aggregate((first, second) => first + ", " + second);
Вы хотите использовать метод 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);
Конечно, их повторное разделение - задача немного более сложная, требующая небольшого количества регулярных выражений.
Как другие сказали: Строка. Присоединиться к
- это обычно лучший способ сделать это. Но что, если у вас есть 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(",");
Используйте
string s = string.Join (",", new string[] {"aaa", "bbb", "ccc"});
Если у вас есть массив строк, используйте 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();
}