Konvertieren Sie eine Liste in eine Zeichenfolge in C #


184

Wie konvertiere ich eine Liste in eine Zeichenfolge in C #?

Wenn ich toStringein List-Objekt ausführe , erhalte ich:

System.Collections.Generic.List`1 [System.String]


1
Eine Liste ist eine Sammlung. Wie soll diese Zeichenfolge aussehen?
Marko

Sie können eine der drei hier genannten Möglichkeiten ausprobieren .
RBT

Antworten:


363

Vielleicht versuchst du es zu tun

string combindedString = string.Join( ",", myList.ToArray() );

Sie können "," durch das ersetzen, durch das Sie die Elemente in der Liste teilen möchten.

Bearbeiten : Wie in den Kommentaren erwähnt, könnten Sie auch tun

string combindedString = string.Join( ",", myList);

Referenz:

Join<T>(String, IEnumerable<T>) 
Concatenates the members of a collection, using the specified separator between each member.

4
meinst du string combindedString = string.Join (",", myList.ToArray ());
Sawe

2
Argument '2': Konvertiert nicht von 'System.Collections.Generic.List <string>' in 'string []'
Ash

9
Ich habe dies kürzlich verwendet, es funktioniert - lassen Sie einfach die .ToArray ()
Adrian K

3
@AdrianK Sie haben Recht, weil das .NET 4.0 die Möglichkeit hinzugefügt hat, einen beliebigen IEnumerable <string> zu übergeben. 4.0 wurde jedoch im April 2010 veröffentlicht, bevor diese Frage und Antwort veröffentlicht wurden, sodass die Leute hier vielleicht noch nichts davon wussten (außer ein paar unten)
Andrew Steitz

Für vb.net, Dim combindedString As String = String.Join (",", myList.ToArray ())
PartTimeNerd

55

Ich werde mit meinem Bauchgefühl gehen und davon ausgehen, dass Sie das Ergebnis des Aufrufs ToStringjedes Elements der Liste verketten möchten .

var result = string.Join(",", list.ToArray());

16

Sie könnten verwenden string.Join:

List<string> list = new List<string>()
{
    "Red",
    "Blue",
    "Green"
};

string output = string.Join(Environment.NewLine, list.ToArray());    
Console.Write(output);

Das Ergebnis wäre:

Red    
Blue    
Green

Alternativ Environment.NewLinekönnen Sie es durch ein auf Zeichenfolgen basierendes Zeilentrennzeichen Ihrer Wahl ersetzen.


14

Wenn Sie etwas etwas komplexeres als eine einfache Verknüpfung wünschen, können Sie LINQ verwenden, z

var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");

Nimmt ["A", "B", "C"] und erzeugt "(a) (b) (c)"


1
Verwenden Sie Aggregat mit einem Startwert als ersten Parameter, um zu vermeiden, dass InvalidOperationException für leere Sammlungen ausgelöst wird.
Huacanacha

13

String.Join(" ", myList)oder String.Join(" ", myList.ToArray()). Das erste Argument ist das Trennzeichen zwischen den Teilzeichenfolgen.

var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"

Abhängig von Ihrer .NET-Version müssen Sie möglicherweise zuerst ToArray () in der Liste verwenden.


9

Sie haben eine List<string>- wenn Sie wollen, dass sie verkettet werden, so etwas wie

string s = string.Join("", list);

würde funktionieren (zumindest in .NET 4.0). Der erste Parameter ist das Trennzeichen. Sie können also auch durch Kommas trennen usw.

Möglicherweise möchten Sie auch StringBuilder verwenden, um Verkettungen auszuführen, anstatt eine Liste zu erstellen.


8

Die .ToString()Methode für Referenztypen wird normalerweise wieder aufgelöst, es System.Object.ToString()sei denn, Sie überschreiben sie in einem abgeleiteten Typ (möglicherweise mithilfe von Erweiterungsmethoden für die integrierten Typen). Das Standardverhalten für diese Methode besteht darin, den Namen des Typs auszugeben, für den sie aufgerufen wird. Was Sie also sehen, ist erwartetes Verhalten.

Sie könnten so etwas versuchen string.Join(", ", myList.ToArray());, um dies zu erreichen. Es ist ein zusätzlicher Schritt, aber es könnte in eine Erweiterungsmethode integriert werden System.Collections.Generic.List<T>, um es ein bisschen einfacher zu machen. Etwas wie das:

public static class GenericListExtensions
{
    public static string ToString<T>(this IList<T> list)
    {
        return string.Join(", ", list);
    }
}

(Beachten Sie, dass dies Freihand- und ungetesteter Code ist. Ich habe derzeit keinen Compiler zur Hand. Sie sollten also ein wenig damit experimentieren.)


Es funktioniert, wenn ich es nicht ToString nenne oder es mit generischen Parametern ausführe. Aber ich mag Ihre Idee, Erweiterungsmethode zu verwenden :)
IAdapter


2

Wenn Sie die Elemente in einer Liste in eine große lange Zeichenfolge verwandeln möchten, gehen Sie wie folgt vor : String.Join("", myList). In einigen älteren Versionen des Frameworks können Sie keine IEnumerable als zweiten Parameter übergeben. Daher müssen Sie Ihre Liste möglicherweise durch Aufrufen von .ToArray () in ein Array konvertieren.


2

Die direkte Antwort auf Ihre Frage ist, String.Joinwie andere erwähnt haben.

Wenn Sie jedoch einige Manipulationen benötigen, können Sie Folgendes verwenden Aggregate:

List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");

string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();

1
Stellen Sie im Produktionscode sicher, dass Ihre Liste ein Element enthält, da sonst eine Ausnahme ausgelöst wird.
AZ_

1

Diese Methode hat mir beim Versuch geholfen, Daten aus der Textdatei abzurufen und im Array zu speichern. Weisen Sie sie dann einer verfügbaren Zeichenfolge zu.

string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
string marRes = string.Join(Environment.NewLine, lines.ToArray());

Hoffentlich kann jemand helfen !!!!


0

Das scheint bei mir zu funktionieren.

var combindedString = new string(list.ToArray());

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.