Estoy almacenando un ArrayList of Ids en un script de procesamiento que quiero escupir como una lista delimitada por comas para la salida al registro de depuración. ¿Hay alguna manera de que pueda obtener esto fácilmente sin recorrer las cosas?
EDITAR: Gracias a Joel por señalar la Lista (de T) que está disponible en .net 2.0 y superior. Eso hace que las cosas sean mucho más fáciles si lo tienes disponible.
Respuestas:
Sí, estoy respondiendo mi propia pregunta, pero todavía no lo he encontrado aquí y pensé que esto era algo bastante hábil:
... en VB.NET:
String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))
...C ª#
string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))
El único problema con esto es que ArrayList debe tener los elementos almacenados como cadenas si está usando Option Strict para asegurarse de que la conversión se realice correctamente.
EDITAR: Si está utilizando .net 2.0 o superior, simplemente cree un objeto de tipo List (Of String) y podrá obtener lo que necesita. ¡Muchas gracias a Joel por mencionar este tema!
String.Join(",", TargetList.ToArray())
fuente
Las soluciones hasta ahora son todas bastante complicadas. La solución idiomática debería ser sin duda alguna:
String.Join(",", x.Cast(Of String)().ToArray())
No hay necesidad de acrobacias sofisticadas en las nuevas versiones de framework. Suponiendo una versión no tan moderna, lo siguiente sería lo más fácil:
Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))
La segunda solución de mspmsp también es un buen enfoque, pero no funciona porque pierde la
AddressOf
palabra clave. Además,Convert.ToString
es bastante ineficiente (muchas evaluaciones internas innecesarias) y laConvert
clase generalmente no está diseñada de manera muy limpia. Tiendo a evitarlo, especialmente porque es completamente redundante.fuente
MS.VB.CS.Conversions.ToString
función auxiliar que resulta en una simpleToString
llamada. Pero incluso este método no llamaría directamente y (a diferencia de a través de los operadores de conversión VB).Algo como:
String.Join(",", myArrayList.toArray(string.GetType()) );
Que básicamente bucles ya sabes ...
EDITAR
qué tal si:
string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
fuente
string.Join(" ,", myArrayList.ToArray());
Esto funcionará con .net framework 4.5fuente
Aquí hay un ejemplo simple que demuestra la creación de una cadena delimitada por comas usando String.Join () de una lista de cadenas:
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());
fuente
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()
o
string.Concat(foo.ToArray().Select(a => a += ",").ToArray())
Actualizando, ya que es extremadamente antiguo. Por supuesto, deberías usar string. Únete ahora. No existía como una opción en el momento de escribir este artículo.
fuente