Как создать строку с разделителями-запятыми из ArrayList?

Я сохраняю ArrayList идентификаторов в обработке script, которую я хочу выплюнуть в виде списка с разделителями-запятыми для вывода в журнал отладки. Есть ли способ, которым я могу легко это сделать, не зацикливаясь на вещах?

EDIT: Спасибо Джоэлю за указание списка (Of T), доступного в .net 2.0 и выше. Это делает вещи TONS более легкими, если у вас есть это.

Ответ 1

Да, я отвечаю на свой вопрос, но я еще не нашел его здесь и подумал, что это довольно гладкая вещь:

... в VB.NET:

String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))

... в С#

string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))

Единственным "полученным" для них является то, что ArrayList должен иметь элементы, хранящиеся в виде строк, если вы используете Option Strict, чтобы убедиться, что преобразование происходит должным образом.

EDIT: если вы используете .net 2.0 или выше, просто создайте объект типа List (Of String), и вы можете получить то, что вам нужно. Большое спасибо Джоэлю за это!

String.Join(",", TargetList.ToArray())

Ответ 2

Решения до сих пор довольно сложны. Идиоматическое решение должно быть несомненно:

String.Join(",", x.Cast(Of String)().ToArray())

В новых версиях фреймов нет необходимости в фантастической акробатике. Предположим, что это не очень современная версия, было бы проще:

Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))

mspmsp второе решение - хороший подход, но он не работает, потому что он пропускает ключевое слово AddressOf. Кроме того, Convert.ToString довольно неэффективен (много ненужных внутренних оценок), а класс Convert обычно не очень прост. Я стараюсь избегать этого, тем более, что он полностью избыточен.

Ответ 3

Что-то вроде:

String.Join(",", myArrayList.toArray(string.GetType()) );

Что в основном заставляет меня знать...

ИЗМЕНИТЬ

как насчет:

string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));

Ответ 4

string.Join(" ,", myArrayList.ToArray()); Это будет работать с .net framework 4.5

Ответ 5

foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()

или же

string.Concat(foo.ToArray().Select(a => a += ",").ToArray())

Обновление, так как это очень старое. Вы должны, конечно, использовать string.Join сейчас. Это не существовало как вариант во время написания.

Ответ 6

Вот простой пример, демонстрирующий создание строки с разделителями-запятыми с использованием String.Join() из списка строк:

List<string> histList = new List<string>();
histList.Add(dt.ToString("MM/dd/yyyy::HH:mm:ss.ffff"));
histList.Add(Index.ToString());
/*arValue is array of Singles */
foreach (Single s in arValue)
{
     histList.Add(s.ToString());
}
String HistLine = String.Join(",", histList.ToArray());