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(newchar[]{','}).ToList();
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>:
string given="Welcome To Programming";List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list
Jika Anda sudah memiliki daftar dan ingin menambahkan nilai dari string yang dipisahkan, Anda dapat menggunakan AddRangeatau InsertRange. Sebagai contoh:
//Default delimiter is ,var split =newStringConverter().ConvertTo<List<string>>(names);//You can also have your custom delimiter for e.g. ;var split =newStringConverter().ConvertTo<List<string>>(names,newConverterOptions{Delimiter=';'});
for
loop, yang lebih membosankan, rawan kesalahan, dan tidak jelas.Jawaban:
Atau bahkan lebih bersih dengan saran Dan:
sumber
new char[] { }
sebagian. Ini lebih mudah dibaca, setidaknya bagi saya .System.LINQ
namespace?The
List<T>
memiliki konstruktor yang menerimaIEnumerable<T>
:sumber
Saya lebih suka ini karena ini mencegah satu daftar item dengan item kosong jika string sumber Anda kosong:
sumber
Pisahkan string yang dipisahkan oleh karakter dan kembalikan semua elemen yang tidak kosong.
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8
sumber
keluaran:
sumber
Jika Anda sudah memiliki daftar dan ingin menambahkan nilai dari string yang dipisahkan, Anda dapat menggunakan
AddRange
atauInsertRange
. Sebagai contoh:sumber
Gunakan paket nuget Stringify.Library
sumber