Daftar‹panjang› hingga string yang dibatasi koma di C#

Hal ini sering muncul. Saya memiliki Daftar dan saya ingin membuka string yang dibatasi koma dari semua elemen dalam daftar yang dapat saya gunakan dalam SQL.

Apa cara paling elegan untuk melakukan ini di C#? Mengulangi semuanya baik-baik saja, kecuali elemen pertama atau terakhir harus menggunakan huruf khusus karena saya tidak ingin koma di depan atau di belakang.

Punya satu kalimat yang bagus?


person John Shedletsky    schedule 02.12.2010    source sumber


Jawaban (8)


string.Gabung adalah temanmu...

var list = new List<long> {1, 2, 3, 4};
var commaSeparated = string.Join(",", list);
person James Kovacs    schedule 02.12.2010
comment
Saya yakin hal itu menimbulkan kesalahan sintaksis - String.Join tidak akan menggunakan Daftar‹panjang› sebagai argumen kedua. - person John Shedletsky; 02.12.2010
comment
@John Shedletsky: .NET Framework 4.0 memperkenalkan String.Join‹T› Metode ( String, IEnumerable‹T›) - person dtb; 02.12.2010
comment
@dtb: sepertinya merupakan metode baru .NET 4 - person Vlad; 02.12.2010
comment
@John - Ini dikompilasi dan memberi saya hasil yang diharapkan. Seperti disebutkan etb, ada kelebihan beban yang memerlukan IEnumerable‹T›. (Itu diperkenalkan di .NET 4.) - person James Kovacs; 02.12.2010
comment
Ya, inilah yang kuharapkan. Terjebak dengan 3,5 untuk saat ini. Mendesah. - person John Shedletsky; 02.12.2010
comment
@John - Dengan .NET 3.5, hal terbaik yang dapat Anda lakukan adalah saran Matthew di atas dengan Select() dan ToArray(). - person James Kovacs; 02.12.2010
comment
SELAIN: Lucu bagaimana kami para pengembang sekarang mengeluh karena terjebak di .NET 3.5. Itu cukup mengguncang belum lama ini... - person James Kovacs; 02.12.2010

List<long> items = // init here
string result = string.Join(", ", items.Select(i => i.ToString()).ToArray());

Tidak yakin apakah ini cara yang paling elegan, tetapi ini adalah cara yang 1 liner!

Sekarang ada juga string.Join yang menerima IEnumerable<T>, sehingga menjadi lebih pendek lagi:

string result = string.Join(", ", items);

Berkat mengetik inferensi, Anda tidak perlu menentukan Join<long>

person Matthew Abbott    schedule 02.12.2010

string.Join(",", Array.ConvertAll(list.ToArray(), item => item.ToString()));

(ditulis langsung ke dalam postingan, jadi saya mungkin salah memasukkan beberapa parameter, tetapi Anda mengerti)

person Neil Barnwell    schedule 02.12.2010
comment
Ini pertama-tama mengalokasikan array baru dari List<> karena .ToArray(), kemudian mengalokasikan array lain karena Array.ConvertAll. Sejak .NET versi 4.0 (Visual Studio 2010) ada kelebihan yang bekerja secara langsung, string.Join(",", list). - person Jeppe Stig Nielsen; 02.07.2013

Jika Anda melakukannya secara manual, Anda seharusnya tidak memiliki kasus khusus untuk nilai pertama dan terakhir, Anda bisa melakukan ini:

List<long> junk = // have some values here;
string separator = string.Empty;
string list = string.Empty;

foreach(long john in junk)
{
    list += separator + john.ToString();
    separator = ", ";
}

Bukan mengatakan Anda harus melakukan ini, anggap ini hanya sebagai komentar.

person bevacqua    schedule 02.12.2010

// Content IDs
List<long> cIds = new List<long>();
cIds.Add(1);
cIds.Add(2);
cIds.Add(1);
cIds.Add(3);
cIds.Add(3);
string ids = string.Join(",", cIds.Distinct().Select(x => x.ToString()).ToArray());
// The example return the following output:
// ids = "1,2,3"

mengembalikan daftar item unik yang dibatasi koma.

person gschuster    schedule 01.03.2011

    public static string CommaSeparate(this IEnumerable<string> values)
    {
        if (values.Count() == 0) return "[none]";
        return string.Join(", ", values.ToArray());
    }

Ini adalah metode ekstensi yang saya gunakan untuk melakukan ini di aplikasi saya. Ini didasarkan pada IEnumerable tetapi harus serupa untuk List.

person Marcie    schedule 02.12.2010

Saya yakin String.Join dapat melakukannya.

person karl.r    schedule 02.12.2010

List<long> list =new List<long>(){1,2,3,4,5,6,7};

StringBuilder str =new StringBuilder();    

foreach(var i in list)
{
str.Append(i).Append(',');
}

Ini akan menambahkan nilai panjang di (stringBuilder) str sebagai

Jawab: str = 1,2,3,4,5,6,7

person Arun Manjhi    schedule 21.09.2012
comment
Pertanyaan ini sudah mendapat jawaban yang ditandai diterima beberapa waktu lalu. Sebaiknya hanya menghidupkan kembali sebuah pertanyaan jika jawaban Anda benar-benar menambahkan sesuatu yang berguna/membantu. - person Samuel Parkinson; 21.09.2012