Я сохраняю список идентификаторов ArrayList в сценарии обработки, который хочу выдать в виде списка с разделителями-запятыми для вывода в журнал отладки. Есть ли способ легко получить это, не зацикливаясь на вещах?
РЕДАКТИРОВАТЬ: Спасибо Джоэлу за указание на Список (Of T), который доступен в .net 2.0 и выше. Это НАМНОГО упрощает работу, если она у вас есть.
Ответы:
Да, я отвечаю на свой вопрос, но я еще не нашел его здесь и подумал, что это довольно гладкая вещь:
... в 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())
источник
Пока все решения довольно сложные. Идиоматическое решение, несомненно, должно быть таким:
String.Join(",", x.Cast(Of String)().ToArray())
В новых версиях фреймворка нет необходимости в причудливой акробатике. Предположим, не очень современная версия, проще всего сделать следующее:
Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))
Второе решение mspmsp - тоже хороший подход, но он не работает, потому что пропускает
AddressOf
ключевое слово. Кроме того,Convert.ToString
это довольно неэффективно (много ненужных внутренних оценок), иConvert
класс, как правило, не очень четко спроектирован. Я стараюсь избегать этого, тем более что он полностью избыточен.источник
MS.VB.CS.Conversions.ToString
вспомогательную функцию, что приводит к простомуToString
вызову. Но даже этот метод я бы не стал называть прямым y (в отличие от операторов приведения VB).Что-то вроде:
String.Join(",", myArrayList.toArray(string.GetType()) );
Что в основном зацикливается, я знаю ...
РЕДАКТИРОВАТЬ
как насчет:
string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
источник
string.Join(" ,", myArrayList.ToArray());
Это будет работать с .net framework 4.5источник
Вот простой пример, демонстрирующий создание строки с разделителями-запятыми с помощью 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());
источник
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()
или же
string.Concat(foo.ToArray().Select(a => a += ",").ToArray())
Обновление, так как это очень старое. Вы, конечно же, должны использовать string.Join now. На момент написания этого варианта не существовало.
источник
Пока что я нашел это хорошее и быстрое решение
//CPID[] is the array string cps = ""; if (CPID.Length > 0) { foreach (var item in CPID) { cps += item.Trim() + ","; } } //Use the string cps
источник