Konversi daftar menjadi string dalam C #

184

Bagaimana cara mengonversi daftar menjadi string dalam C #?

Ketika saya mengeksekusi toStringpada objek Daftar, saya mendapatkan:

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

IAdapter
sumber
1
Daftar adalah koleksi, seperti apa string ini seharusnya?
Marko
Anda dapat mencoba salah satu dari tiga cara yang disebutkan di sini .
RBT

Jawaban:

365

Mungkin Anda sedang berusaha melakukannya

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

Anda dapat mengganti "," dengan apa yang ingin Anda pisahkan elemen dalam daftar.

Sunting : Seperti disebutkan dalam komentar yang juga bisa Anda lakukan

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

Referensi:

Join<T>(String, IEnumerable<T>) 
Concatenates the members of a collection, using the specified separator between each member.
Øyvind Bråthen
sumber
4
maksud Anda string combindedString = string.Join (",", myList.ToArray ());
sawe
2
Argumen '2': tidak dapat dikonversi dari 'System.Collections.Generic.List <string>' ke 'string []'
Ash
9
Saya menggunakan ini baru-baru ini, itu berhasil - hanya menghilangkan .ToArray ()
Adrian K
3
@AdrianK Anda benar karena. Net 4.0 menambahkan kemampuan untuk melewatkan setiap IEnumerable <string>. Namun 4.0 dirilis pada April 2010, sebelum pertanyaan dan jawaban ini diposting jadi mungkin orang-orang di sini belum menyadarinya (selain beberapa di bawah)
Andrew Steitz
Untuk vb.net, Dim combindedString As String = String.Join (",", myList.ToArray ())
PartTimeNerd
55

Saya akan pergi dengan firasat saya dan menganggap Anda ingin menyatukan hasil dari memanggil ToStringsetiap elemen dari daftar.

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

Anda bisa menggunakan string.Join:

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

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

Hasilnya adalah:

Red    
Blue    
Green

Sebagai alternatif Environment.NewLine, Anda dapat menggantinya dengan pemisah garis berbasis string yang Anda pilih.

eandersson
sumber
14

Jika Anda menginginkan sesuatu yang sedikit lebih kompleks daripada gabung sederhana, Anda dapat menggunakan LINQ misalnya

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

Akan mengambil ["A", "B", "C"] dan menghasilkan "(a) (b) (c)"

James Gaunt
sumber
1
Gunakan Agregat dengan seed sebagai parameter pertama untuk menghindari melempar InvalidOperationException untuk koleksi kosong.
Huacanacha
13

String.Join(" ", myList)atau String.Join(" ", myList.ToArray()). Argumen pertama adalah pemisah antara substring.

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

Bergantung pada versi .NET Anda, Anda mungkin perlu menggunakan ToArray () pada daftar terlebih dahulu ..

Markus Johnsson
sumber
9

Anda punya List<string>- jadi jika Anda ingin mereka disatukan, kira-kira seperti itu

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

akan bekerja (setidaknya dalam. NET 4.0). Parameter pertama adalah pembatas. Jadi Anda juga bisa koma-delimit dll.

Anda mungkin juga ingin melihat menggunakan StringBuilder untuk melakukan menjalankan penggabungan, daripada membentuk daftar.

Marc Gravell
sumber
8

The .ToString()metode untuk referensi jenis biasanya sembuh kembali keSystem.Object.ToString() kecuali Anda menimpanya di tipe turunan (mungkin menggunakan metode ekstensi untuk built-in jenis). Perilaku default untuk metode ini adalah untuk menampilkan nama tipe yang dipanggil. Jadi yang Anda lihat adalah perilaku yang diharapkan.

Anda dapat mencoba sesuatu seperti string.Join(", ", myList.ToArray());untuk mencapai ini. Ini langkah tambahan, tetapi bisa dimasukkan ke dalam metode ekstensi System.Collections.Generic.List<T>untuk membuatnya sedikit lebih mudah. Sesuatu seperti ini:

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

(Perhatikan bahwa ini adalah kode bebas dan tidak teruji. Saat ini saya tidak memiliki kompiler yang berguna. Jadi, Anda ingin sedikit bereksperimen dengannya.)

David
sumber
itu berfungsi ketika saya menyebutnya bukan ToString atau menjalankannya dengan parameter generik. Tapi saya suka ide Anda menggunakan metode ekstensi :)
IAdapter
4

Sulit dikatakan, tetapi mungkin Anda mencari sesuatu seperti:

var myString = String.Join(String.Empty, myList.ToArray());

Ini secara implisit akan memanggil metode ToString () pada setiap item dalam daftar dan menyatukannya.

Daniel Schaffer
sumber
1
String.Concat()akan mencapai hal yang sama lebih baik.
Jeff Mercado
2

Jika Anda mencari untuk mengubah item dalam daftar menjadi string panjang yang besar, lakukan ini: String.Join("", myList). Beberapa versi kerangka kerja yang lebih lama tidak memungkinkan Anda untuk melewatkan IEnumerable sebagai parameter kedua, jadi Anda mungkin perlu mengubah daftar Anda menjadi sebuah array dengan memanggil .ToArray ().

mattmc3
sumber
2

Jawaban langsung untuk pertanyaan Anda adalah String.Join seperti yang disebutkan orang lain.

Namun, jika Anda memerlukan beberapa manipulasi, Anda dapat menggunakan 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();
LCJ
sumber
1
dalam kode produksi pastikan daftar Anda memiliki elemen apa pun selain itu akan membuang pengecualian.
AZ_
1

Metode ini membantu saya ketika mencoba untuk mengambil data dari File Teks dan menyimpannya di Array kemudian Tetapkan ke string yang tersedia.

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

Semoga dapat membantu Seseorang !!!!

PatsonLeaner
sumber
0

Ini sepertinya bekerja untuk saya.

var combindedString = new string(list.ToArray());
mutuma
sumber
0

semua jawaban di atas TIDAK bekerja untuk daftar bersarang.

Andreas Otto
sumber