Ubah string menjadi List <string> dalam satu baris?

102

Saya memiliki string:

var names = "Brian,Joe,Chris";

Apakah ada cara untuk mengubahnya menjadi List<string>dibatasi oleh ,dalam satu baris?

Brian David Berman
sumber
15
Saya tidak memahami persyaratan "dalam satu baris". Cobalah untuk menulis kode yang jelas dan dapat dimengerti, bukan cara untuk memasukkan operasi ke dalam ruang sekecil mungkin.
Ed S.
6
Dengan munculnya LINQ, "satu baris" yang dapat dibaca dan bersih telah menjadi lebih umum di C # IMO.
Matt Greer
5
@ Ed S. - Meskipun saya setuju bahwa "dalam satu baris" mungkin bukan cara terbaik untuk menjelaskannya, pernyataan satu baris seperti yang diberikan Matt Greer cenderung sangat jelas dan dapat dimengerti. Dugaan saya, dia hanya ingin menghindari penggunaan forloop, yang lebih membosankan, rawan kesalahan, dan tidak jelas.
StriplingWarrior
4
Saya tidak bermaksud mengatakan bahwa satu kalimat secara inheren lebih sulit untuk dipahami, saya hanya mengatakan bahwa itu seharusnya tidak pernah menjadi persyaratan. Lakukan saja dengan cara terbaik yang tersedia. Jika itu terjadi dalam satu baris, bagus, tapi itu bukan sesuatu yang seharusnya membentuk cara Anda menulis kode Anda.
Ed S.

Jawaban:

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

Atau bahkan lebih bersih dengan saran Dan:

List<string> result = names.Split(',').ToList();
Matt Greer
sumber
11
Anda mungkin sengaja menaruhnya di sana, tetapi saya selalu mengabaikan new char[] { }sebagian. Ini lebih mudah dibaca, setidaknya bagi saya .
Dan Tao
4
@ Dan: Saya setuju, dan umumnya saya menggunakan parameter yang berlebihan. Tetapi untuk jawaban atas sebuah pertanyaan terkadang saya merasa verbositas lebih baik. Cuma soal opini kok.
Matt Greer
2
ToList () sepertinya tidak berguna lagi?
Gina Marano
10
Apakah Anda memasukkan System.LINQnamespace?
Matt Greer
42

The List<T>memiliki konstruktor yang menerima IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));
Nathan Anderson
sumber
Luar biasa - tidak perlu mengimpor System.Linq
VictorySaber
3

Saya lebih suka ini karena ini mencegah satu daftar item dengan item kosong jika string sumber Anda kosong:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();
KingOfHypocrites
sumber
1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

keluaran:

Welcome

To 

Programming
Maghalakshmi Saravana
sumber
0

Jika Anda sudah memiliki daftar dan ingin menambahkan nilai dari string yang dipisahkan, Anda dapat menggunakan AddRangeatau InsertRange. Sebagai contoh:

existingList.AddRange(names.Split(','));
c32hedge
sumber
0

Gunakan paket nuget Stringify.Library

//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 = ';' });
Mithun Basak
sumber