Bir listeyi C # 'da bir dizeye nasıl dönüştürebilirim?
Bir toString
List nesnesinde yürüttüğümde , şunu elde ederim:
System.Collections.Generic.List`1 [System.string]
Bir listeyi C # 'da bir dizeye nasıl dönüştürebilirim?
Bir toString
List nesnesinde yürüttüğümde , şunu elde ederim:
System.Collections.Generic.List`1 [System.string]
Yanıtlar:
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.
Bağırsak hislerimle gideceğim ToString
ve listenin her bir öğesini çağırmanın sonucunu birleştirmek istediğinizi varsayalım .
var result = string.Join(",", list.ToArray());
Ş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.
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
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.
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.
.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.)
Söylemesi zor, ama belki de şöyle bir şey arıyorsunuz:
var myString = String.Join(String.Empty, myList.ToArray());
Bu, listedeki öğelerin her birinde ToString () yöntemini örtük olarak çağırır ve birleştirir.
String.Concat()
aynı şeyi daha iyi başaracak.
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();
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 !!!!
Tüm cevaplar yukarıdaki gelmez DEĞİL iç içe listeler için çalışıyoruz.