Я сохраняю ArrayList идентификаторов в обработке script, которую я хочу выплюнуть в виде списка с разделителями-запятыми для вывода в журнал отладки. Есть ли способ, которым я могу легко это сделать, не зацикливаясь на вещах?
EDIT: Спасибо Джоэлю за указание списка (Of T), доступного в .net 2.0 и выше. Это делает вещи TONS более легкими, если у вас есть это.
Да, я отвечаю на свой вопрос, но я еще не нашел его здесь и подумал, что это довольно гладкая вещь:
... в 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())
Решения до сих пор довольно сложны. Идиоматическое решение должно быть несомненно:
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 сейчас. Это не существовало как вариант во время написания.