Dize bir satırda List <string> 'e dönüştürülsün mü?


104

Bir dizem var:

var names = "Brian,Joe,Chris";

Bunu tek satırda List<string>sınırlanmış olarak dönüştürmenin bir yolu var mı ,?


15
"Tek satırda" gerekliliğini anlamıyorum. Bir işlemi olabildiğince küçük bir alana sığdırmanın yollarını değil, açık ve anlaşılır bir kod yazmak için çekim yapın.
Ed S.

6
LINQ'nun gelişiyle birlikte, okunabilir ve temiz olan "tek astarlar" C # IMO'da çok daha yaygın hale geldi.
Matt Greer

5
@Ed S. - "Tek satırda" ifadesinin bunu ifade etmenin en iyi yolu olmadığını kabul etsem de, Matt Greer'in sunduğu gibi tek satırlık ifadeler genellikle çok açık ve anlaşılır. Tahminime göre, sadece fordaha sıkıcı, hataya açık ve net olmayan bir döngü kullanmaktan kaçınmak istiyor .
StriplingWarrior

4
Tek satırlıkların doğal olarak anlaşılmasının daha zor olduğunu söylemek istemiyorum, sadece bunun bir gereklilik olmaması gerektiğini söylüyorum. Sadece bunu mümkün olan en iyi şekilde yapın. Bu tek satırda olursa harika, ancak kodunuzu yazma şeklinizi şekillendirmesi gereken bir şey değil.
Ed S.

Yanıtlar:


200
List<string> result = names.Split(new char[] { ',' }).ToList();

Ya da Dan'in önerisiyle daha temiz:

List<string> result = names.Split(',').ToList();

11
Oraya bilerek koymuş olabilirsin, ama ben her zaman tüm new char[] { }kısmı dışarıda bırakıyorum . Bu şekilde daha okunabilir, en azından benim için.
Dan Tao

4
@Dan: Kabul ediyorum ve genellikle param aşırı yüklemesini kullanıyorum. Ancak bir sorunun cevabı için bazen ayrıntıların daha iyi olduğunu hissediyorum. Gerçekten sadece bir fikir meselesi.
Matt Greer

3
ToList () artık kullanılamıyor gibi görünüyor?
Gina Marano

11
İsim System.LINQalanını getirdin mi?
Matt Greer

42

List<T>Bir kabul eden bir kurucu sahiptir IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));

Mükemmel - System.Linq'i içe
aktarmaya

3

Bunu tercih ediyorum çünkü kaynak dizeniz boşsa, boş bir öğe içeren tek bir öğe listesini engelliyor:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();


1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

çıktı:

Welcome

To 

Programming

0

Zaten bir listeniz varsa ve sınırlandırılmış bir dizeden değerler eklemek istiyorsanız, AddRangeveya kullanabilirsiniz InsertRange. Örneğin:

existingList.AddRange(names.Split(','));

0

Stringify.Library nuget paketini kullanın

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
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.