Bir listeyi C # 'da dizeye dönüştürme


185

Bir listeyi C # 'da bir dizeye nasıl dönüştürebilirim?

Bir toStringList nesnesinde yürüttüğümde , şunu elde ederim:

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


1
Liste bir koleksiyon, bu dize neye benziyor?
Marko

Burada belirtilen üç yoldan herhangi birini deneyebilirsiniz .
RBT

Yanıtlar:


367

Belki yapmaya çalışıyorsun

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

"," İfadesini listedeki öğeleri bölmek istediğiniz öğeyle değiştirebilirsiniz.

Düzenleme : Yorumlarda belirtildiği gibi şunları da yapabilirsiniz

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

Referans:

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

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

2
'2' bağımsız değişkeni: 'System.Collections.Generic.List <string>' öğesinden 'string []'
Ash

9
Bunu son zamanlarda kullandım, işe yarıyor - sadece .ToArray ()
Adrian K

3
@AdrianK haklısınız, çünkü .Net 4.0 herhangi bir IEnumerable <string> geçirme yeteneği ekledi. Ancak 4.0 Nisan 2010'da, bu soru ve cevap gönderilmeden önce yayınlandı, bu yüzden belki de buradaki insanlar henüz farkında değillerdi (aşağıda birkaç tanesi dışında)
Andrew Steitz

Vb.net için Dim combindedString As String = String.Join (",", myList.ToArray ())
PartTimeNerd 7:19

55

Bağırsak hislerimle gideceğim ToStringve listenin her bir öğesini çağırmanın sonucunu birleştirmek istediğinizi varsayalım .

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

16

Şunları kullanabilirsiniz string.Join:

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

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

Sonuç:

Red    
Blue    
Green

Alternatif olarak Environment.NewLine, seçtiğiniz dize tabanlı bir çizgi ayırıcıyla değiştirebilirsiniz.


14

Basit bir birleşmeden biraz daha karmaşık bir şey istiyorsanız, LINQ kullanabilirsiniz.

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

["A", "B", "C"] alacak ve "(a) (b) (c)" üretecek


1
Boş koleksiyonlar için InvalidOperationException öğesini atmaktan kaçınmak için ilk parametre olarak toplamı bir tohumla birlikte kullanın.
Huacanacha

13

String.Join(" ", myList)veya String.Join(" ", myList.ToArray()). İlk argüman alt dizeler arasındaki ayırıcıdır.

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

.NET sürümünüze bağlı olarak, önce listede ToArray () kullanmanız gerekebilir.


9

Bir List<string>- var, bu yüzden bunların birleştirilmesini istiyorsanız,

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

(en azından .NET 4.0'da) çalışır. İlk parametre sınırlayıcıdır. Böylece virgülle ayırma vb. De yapabilirsiniz.

Ayrıca, bir liste oluşturmak yerine çalışan birleştirme yapmak için StringBuilder'ı kullanmaya bakmak isteyebilirsiniz.


8

.ToString()Başvuru türleri için yöntem genellikle geri giderir System.Object.ToString()bir türevi türü geçersiz kılmak sürece (muhtemelen dahili türleri için uzantısı yöntemleri kullanılarak). Bu yöntemin varsayılan davranışı, çağrıldığı türün adını vermektir. Gördüğünüz şey beklenen davranış.

Bunu string.Join(", ", myList.ToArray());başarmak için bir şey deneyebilirsiniz . Ekstra bir adım, ancak System.Collections.Generic.List<T>biraz daha kolay hale getirmek için bir uzatma yöntemine konabilir . Bunun gibi bir şey:

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

(Bu serbest el ve test edilmemiş kod olduğunu unutmayın. Şu anda kullanışlı bir derleyici yok. Bu yüzden biraz denemek isteyeceksiniz.)


Ben ToString değil veya genel parametre ile yürütmek değil çağrıldığında çalışır. Ama uzatma yöntemini kullanma fikrinizi seviyorum :)
IAdapter


2

Büyük bir uzun dize bir listede öğeleri açmak için arıyorsanız, bunu: String.Join("", myList). Çerçevenin bazı eski sürümleri, IEnumerable'ı ikinci parametre olarak geçirmenize izin vermez, bu nedenle .ToArray () öğesini çağırarak listenizi bir diziye dönüştürmeniz gerekebilir.


2

Sorunuzun doğrudan yanıtı String.Join, diğerlerinin belirttiği gibidir.

Bununla birlikte, bazı manipülasyonlara ihtiyacınız varsa, şunları kullanabilirsiniz 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
Üretim kodunda, listenizde herhangi bir öğe olduğundan emin olun, aksi takdirde istisna atar.
AZ_

1

Bu yöntem, Metin Dosyasından veri almaya ve Array'da depolamaya ve ardından değişken bir dizeye atamaya çalışırken bana yardımcı oldu.

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

Umarım birine yardımcı olabilir !!!!


0

Bu benim için işe yarıyor gibi görünüyor.

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

0

Tüm cevaplar yukarıdaki gelmez DEĞİL iç içe listeler için çalışıyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.