string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Bölme yöntemi bir dize döndürdüğü için bu işe yaramaz []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Bölme yöntemi bir dize döndürdüğü için bu işe yaramaz []
Yanıtlar:
İşte bunu yapmanın bir yolu:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
bunun yerine arayabilirsin ; sonuç esasen aynıdır: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Yine de, bir veya diğerini yapmanız gerekir, çünkü dönüş değeri Select()
bir IEnumerable<>
, ancak değilList<>
Select
, bu durumda uzantı geri döner IEnumerable<Int32>
ve liste değildir. Ancak listenin başka bir koleksiyonu kaynak olarak kabul eden bir kurucu vardır.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Basit bir doğrulama eklemek ve geçersiz değerleri atlamak istiyorsanız (istisna atmak yerine), TryParse kullanan bir şey:
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: İşte Antoine tarafından geribildirim dayalı güncellenmiş bir sorgu. Kötü değerleri filtrelemek için önce TryParse'ı, sonra da gerçek dönüşümü yapmak için Ayrıştır'ı çağırır.
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
Edit 2: Charles Burns'ün geri bildirimi sayesinde C # 7.0 için güncellenmiş bir sorgu. Bu yaklaşımla ekstra mos değişkeninden kurtulduğumuza dikkat edin, bu yüzden biraz daha temiz.
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 _)
W / Sen LINQ kullanabilirsiniz int.Parse()
dönüştürmek için string[]
bir etmek IEnumerable<int>
ve sonra bu sonuca geçmesi List<T>
yapıcı:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Küçük bir LINQ uzun bir yol kat ediyor:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
LINQ Sorgusu olmadan, bu yöntemi seçebilirsiniz,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
ve sonra bu Listeyi tamsayı tipine dönüştürebilirsiniz ...
.ToList<string>()
hala ihtiyaçusing 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()
, Parse sizin için herhangi bir boşluk karakterini otomatik olarak kırptığı için eklemenize gerek yoktur.
C # 3.5 kullanıyorsanız bunu başarmak için Linq kullanabilirsiniz.
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
ya da kısa olan
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();
Khalid13'ün cevabında bir değişiklik yaptım. Kullanıcı "0" dizesini koyarsa, yanıtı sonuç listesinden kaldırır. Benzer bir şey yaptım ama anonim bir nesne kullandım.
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, dizenin boş olup olmadığını koruyan özel bir işlevdir.
Yukarıdakilerin yaptığı, hatasız dönüştürülemeyen dizeleri çıkarmaktır. Dönüşümle ilgili bir sorun varsa hata yapmanız gerekiyorsa, kabul edilen cevap hile yapmalıdır.
Bunu tökezledim ve linq olmadan kendi çözümümü paylaşmak istiyorum. Bu ilkel bir yaklaşımdır. Tamsayı olmayan değerler de listeye eklenmez.
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);
}
}
Bu yardımcı olur umarım.
Basit. Önce dizeyi bölün. Virgül (,) 'den sonra boş alanı kesin. Ardından ToList () tanımlı sistem kullanın
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
',' İşaretinden sonraki boşluğu kaldırmak ve virgülle ayrılmış bu metni Liste'ye dönüştürmek için
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();