Ich speichere eine ArrayList of Ids in einem Verarbeitungsskript, das ich als durch Kommas getrennte Liste für die Ausgabe in das Debug-Protokoll ausspucken möchte. Gibt es eine Möglichkeit, dies einfach zu erreichen, ohne die Dinge zu durchlaufen?
EDIT: Vielen Dank an Joel für den Hinweis auf die Liste (Of T), die in .net 2.0 und höher verfügbar ist. Das macht die Sache TONNEN einfacher, wenn Sie es zur Verfügung haben.
Antworten:
Ja, ich beantworte meine eigene Frage, aber ich habe sie hier noch nicht gefunden und dachte, das sei eine ziemlich raffinierte Sache:
... in VB.NET:
String.Join(",", CType(TargetArrayList.ToArray(Type.GetType("System.String")), String()))
... in C #
string.Join(",", (string[])TargetArrayList.ToArray(Type.GetType("System.String")))
Das einzige "Problem" dabei ist, dass in der ArrayList die Elemente als Strings gespeichert sein müssen, wenn Sie Option Strict verwenden, um sicherzustellen, dass die Konvertierung ordnungsgemäß erfolgt.
BEARBEITEN: Wenn Sie .net 2.0 oder höher verwenden, erstellen Sie einfach ein Objekt vom Typ List (Of String), und Sie erhalten das, was Sie benötigen. Vielen Dank an Joel, der das angesprochen hat!
String.Join(",", TargetList.ToArray())
quelle
Die bisherigen Lösungen sind alle recht kompliziert. Die idiomatische Lösung sollte zweifellos sein:
String.Join(",", x.Cast(Of String)().ToArray())
In neuen Framework-Versionen ist keine ausgefallene Akrobatik erforderlich. Unter der Annahme einer nicht so modernen Version wäre Folgendes am einfachsten:
Console.WriteLine(String.Join(",", CType(x.ToArray(GetType(String)), String())))
Die zweite Lösung von mspmsp ist ebenfalls ein guter Ansatz, funktioniert jedoch nicht, da das
AddressOf
Schlüsselwort fehlt . AuchConvert.ToString
ist eher ineffizient (viele unnötige interne Bewertungen) und dieConvert
Klasse ist im Allgemeinen nicht sehr sauber gestaltet. Ich neige dazu, es zu vermeiden, zumal es völlig überflüssig ist.quelle
MS.VB.CS.Conversions.ToString
Hilfsfunktion auf, was zu einem einfachenToString
Aufruf führt. Aber selbst diese Methode würde ich nicht direkt y nennen (im Gegensatz zu den VB-Cast-Operatoren).Etwas wie:
String.Join(",", myArrayList.toArray(string.GetType()) );
Was im Grunde Schleifen weißt du ...
BEARBEITEN
wie wäre es mit:
string.Join(",", Array.ConvertAll<object, string>(a.ToArray(), Convert.ToString));
quelle
string.Join(" ,", myArrayList.ToArray());
Dies funktioniert mit .net Framework 4.5quelle
Hier ist ein einfaches Beispiel, das die Erstellung einer durch Kommas getrennten Zeichenfolge mit String.Join () aus einer Liste von Zeichenfolgen demonstriert:
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());
quelle
foo.ToArray().Aggregate((a, b) => (a + "," + b)).ToString()
oder
string.Concat(foo.ToArray().Select(a => a += ",").ToArray())
Aktualisieren, da dies extrem alt ist. Sie sollten natürlich string.Join jetzt verwenden. Es gab es zum Zeitpunkt des Schreibens nicht als Option.
quelle