Как создать строку с разделителями-запятыми из ArrayList?
Я храню ArrayList идентификаторов в скрипте обработки, который я хочу выплюнуть как список с разделителями-запятыми для вывода в журнал отладки. Есть ли способ, которым я могу получить это легко, не зацикливаясь на вещах?
EDIT: спасибо Джоэлу за указание списка (из T), который доступен в .net 2.0 и выше. Это делает вещи тоннами легче, если у вас есть это доступно.
6 ответов:
Да, я отвечаю на свой собственный вопрос, но я еще не нашел его здесь и подумал, что это довольно гладкая вещь:
... in VB.NET:
String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))...в C#
string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))единственный "gotcha" к ним является то, что ArrayList должен иметь элементы, хранящиеся в виде строк, Если вы используете Option Strict, чтобы убедиться, что преобразование происходит правильно.
EDIT: если вы используете .net 2.0 или выше, просто создайте объект типа списка (строки), и вы можете получить то, что вам нужно. Большое спасибо Джоэлу за то, что он поднял этот вопрос!
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класс, как правило, не очень чисто спроектирован. Я стараюсь избегать этого, тем более, что это совершенно излишне.
что-то типа:
String.Join(",", myArrayList.toArray(string.GetType()) );который в основном петли я знаю...
EDIT
Как насчет:
string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()или
string.Concat(foo.ToArray().Select(a => a += ",").ToArray())
вот простой пример, демонстрирующий создание строки с разделителями-запятыми с помощью 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());
Comments