string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Ini tidak berhasil karena metode split mengembalikan string []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Ini tidak berhasil karena metode split mengembalikan string []
Jawaban:
Inilah salah satu cara melakukannya:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
sebaliknya; hasilnya pada dasarnya sama: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Anda perlu melakukan satu atau yang lain, karena nilai kembalinya Select()
adalah IEnumerable<>
, tetapi bukanList<>
Select
ekstensi dalam kasus ini kembali IEnumerable<Int32>
dan tidak tercantum. Namun daftar memiliki konstruktor yang menerima koleksi lain sebagai sumber.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Jika Anda ingin menyertakan beberapa validasi sederhana dan melewatkan nilai yang tidak valid (alih-alih melemparkan pengecualian), berikut ini sesuatu yang menggunakan TryParse:
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
EDIT: Ini adalah permintaan yang diperbarui berdasarkan umpan balik dari Antoine. Itu panggilan TryParse pertama untuk menyaring nilai-nilai buruk, dan kemudian mengurai untuk melakukan konversi yang sebenarnya.
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
Sunting 2: Permintaan yang diperbarui untuk C # 7.0, terima kasih atas umpan balik dari Charles Burns. Perhatikan bahwa kita menyingkirkan variabel mos ekstra dengan pendekatan ini, jadi ini sedikit lebih bersih.
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
int.TryParse(m, out int _)
Anda dapat menggunakan LINQ dengan / int.Parse()
untuk mengonversikan string[]
ke IEnumerable<int>
dan kemudian meneruskan hasil itu ke List<T>
konstruktor:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
LINQ kecil sangat membantu:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Tanpa LINQ Query, Anda dapat memilih metode ini,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
dan kemudian Anda dapat mengubah daftar ini menjadi tipe integer ...
.ToList<string>()
masih membutuhkanusing System.Linq;
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
.Select(x => x.Trim()
, karena Parse secara otomatis memangkas karakter ruang apa pun untuk Anda.
Jika Anda menggunakan C # 3.5 Anda dapat menggunakan Linq untuk mencapai ini
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
atau yang pendek
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Saya membuat modifikasi pada jawaban khalid13. Jika pengguna meletakkan string "0", jawabannya akan menghapusnya dari daftar yang dihasilkan. Saya melakukan sesuatu yang serupa tetapi menggunakan objek anonim.
var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
.Where(w => w.didConvert)
.Select(s => s.convertedValue)
.ToList();
TrimNullProtection adalah fungsi khusus yang saya buat yang melindungi jika stringnya nol.
Apa yang dilakukan di atas adalah menghapus semua string yang tidak dapat dikonversi tanpa kesalahan. Jika Anda perlu kesalahan jika ada masalah dengan konversi, maka jawaban yang diterima harus melakukan trik.
Saya menemukan ini dan saya hanya ingin berbagi solusi sendiri tanpa LINQ. Ini adalah pendekatan primitif. Nilai-nilai non-integer tidak akan ditambahkan dalam daftar juga.
List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
int val = 0;
if (int.TryParse(item, out val) == true)
{
TagIds.Add(val);
}
}
Semoga ini membantu.
Itu mudah. Pertama-tama pisahkan string. Potong ruang kosong yang ada setelah koma (,). Kemudian gunakan ToList () yang didefinisikan sistem
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
Untuk menghapus spasi setelah ',' dan mengonversi teks yang dipisahkan koma ini ke Daftar
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();