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]


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.

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());

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.


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)"


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 ..


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.


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.)


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


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 ().


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();

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 !!!!


0

Ini sepertinya bekerja untuk saya.

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.