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?


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();

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(','));

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>();


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

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(','));

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 = ';' });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.