Как создать строку с разделителями-запятыми из ArrayList? - PullRequest
72 голосов
/ 17 октября 2008

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

РЕДАКТИРОВАТЬ: Спасибо Джоэлю за указание списка (Of T), который доступен в .net 2.0 и выше. Это облегчает жизнь, если она у вас есть.

Ответы [ 6 ]

139 голосов
/ 17 октября 2008

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

... в VB.NET:

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

... в C #

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

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

РЕДАКТИРОВАТЬ: Если вы используете .net 2.0 или выше, просто создайте объект типа List (Of String), и вы можете получить то, что вам нужно. Большое спасибо Джоэлу за то, что он поднял это!

String.Join(",", TargetList.ToArray())
17 голосов
/ 17 октября 2008

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

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

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

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

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

16 голосов
/ 17 октября 2008

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

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

Что в основном циклы, ты знаешь ...

EDIT

Как насчет:

string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
7 голосов
/ 04 февраля 2016

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

1 голос
/ 17 апреля 2012

Вот простой пример, демонстрирующий создание строки с разделителями-запятыми с использованием 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());
1 голос
/ 17 октября 2008
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()

или

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...