string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
To nie działa, ponieważ metoda split zwraca ciąg []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
To nie działa, ponieważ metoda split zwraca ciąg []
Odpowiedzi:
Oto jeden ze sposobów, aby to zrobić:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>?
ToList()zamiast tego zadzwonić ; wynik jest w zasadzie taki sam: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList(); musisz jednak zrobić jedno lub drugie, ponieważ zwracana wartość Select()to IEnumerable<>, ale nieList<>
Selectrozszerzenie w tym przypadku powraca IEnumerable<Int32>i nie jest listą. Jednak lista ma konstruktor akceptujący inną kolekcję jako źródło.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Jeśli chcesz dołączyć prostą weryfikację i pominąć niepoprawne wartości (zamiast zgłaszać wyjątek), oto coś, co używa 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
EDYCJA: Oto zaktualizowane zapytanie oparte na opiniach Antoine. Wywołuje TryParse najpierw, aby odfiltrować wszelkie złe wartości, a następnie Parsuj, aby dokonać faktycznej konwersji.
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
Edycja 2: Zaktualizowana kwerenda dla C # 7.0, dzięki opiniom Charlesa Burnsa. Zauważ, że dzięki temu podejściu pozbywamy się dodatkowej zmiennej mos, więc jest ona nieco czystsza.
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 _)
Możesz użyć LINQ w / int.Parse()do konwersji na string[], IEnumerable<int>a następnie przekazać ten wynik do List<T>konstruktora:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Trochę LINQ przechodzi długą drogę:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Bez zapytania LINQ możesz wybrać tę metodę,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
a następnie możesz przekonwertować tę listę na liczbę całkowitą ...
.ToList<string>()nadal potrzebujeusing 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(), ponieważ Parse automatycznie przycina dla Ciebie wszystkie spacje.
Jeśli używasz C # 3.5, możesz użyć Linq, aby to osiągnąć
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
lub krótki
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();
Zmodyfikowałem odpowiedź khalid13. Jeśli użytkownik wstawi ciąg „0”, jego odpowiedź usunie go z wynikowej listy. Zrobiłem coś podobnego, ale użyłem anonimowego obiektu.
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 to stworzona przeze mnie niestandardowa funkcja, która chroni, jeśli ciąg znaków jest pusty.
Powyższe powoduje usunięcie ciągów, których nie można było przekonwertować bez błędu. Jeśli potrzebujesz błędu, jeśli wystąpił problem z konwersją, zaakceptowana odpowiedź powinna załatwić sprawę.
Natknąłem się na to i chcę po prostu podzielić się własnym rozwiązaniem bez linq. To prymitywne podejście. Wartości inne niż całkowite nie zostaną również dodane do listy.
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);
}
}
Mam nadzieję że to pomoże.
To proste. Najpierw podziel sznurek. Przytnij puste miejsce po przecinku (,). Następnie użyj zdefiniowanej przez system ToList ()
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
Aby usunąć spację po „,” i przekonwertować ten tekst rozdzielony przecinkami na List
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();