string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Dies funktioniert nicht, da die Split-Methode einen String [] zurückgibt.
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Dies funktioniert nicht, da die Split-Methode einen String [] zurückgibt.
Antworten:
Hier ist eine Möglichkeit, dies zu tun:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
stattdessen anrufen ; das Ergebnis ist im Wesentlichen die gleiche: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Sie müssen zwar das eine oder andere tun, weil der Rückgabewert Select()
eine ist IEnumerable<>
, aber nicht einList<>
Select
Erweiterung in diesem Fall zurückgegeben wird IEnumerable<Int32>
und nicht aufgelistet ist. In list hat ein Konstruktor jedoch eine andere Sammlung als Quelle.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Wenn Sie eine einfache Validierung einschließen und ungültige Werte überspringen möchten (anstatt eine Ausnahme auszulösen), verwendet TryParse Folgendes:
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
BEARBEITEN: Hier ist eine aktualisierte Abfrage basierend auf dem Feedback von Antoine. Es ruft zuerst TryParse auf, um fehlerhafte Werte herauszufiltern, und dann Parse, um die eigentliche Konvertierung durchzuführen.
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
Bearbeiten 2: Eine aktualisierte Abfrage für C # 7.0 dank des Feedbacks von Charles Burns. Beachten Sie, dass wir mit diesem Ansatz die zusätzliche mos-Variable entfernen, sodass sie etwas sauberer ist.
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 _)
Sie können LINQ w / verwenden int.Parse()
, um das string[]
in ein zu konvertieren IEnumerable<int>
und dieses Ergebnis dann an den List<T>
Konstruktor zu übergeben:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Ein kleiner LINQ reicht weit:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Ohne LINQ-Abfrage können Sie diese Methode auswählen:
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
und dann können Sie diese Liste in einen ganzzahligen Typ konvertieren ...
.ToList<string>()
noch brauchenusing 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()
, da Parse automatisch alle Leerzeichen für Sie schneidet .
Wenn Sie C # 3.5 verwenden, können Sie Linq verwenden, um dies zu erreichen
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
oder der kurze
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();
Ich habe die Antwort von khalid13 geändert. Wenn der Benutzer eine Zeichenfolge mit "0" eingeben würde, würde seine Antwort diese aus der resultierenden Liste entfernen. Ich habe etwas Ähnliches gemacht, aber ein anonymes Objekt verwendet.
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 ist eine benutzerdefinierte Funktion, die ich erstellt habe und die schützt, wenn die Zeichenfolge null ist.
Das oben Gesagte entfernt alle Zeichenfolgen, die nicht fehlerfrei konvertiert werden konnten. Wenn Sie einen Fehler machen müssen, wenn ein Problem mit der Konvertierung aufgetreten ist, sollte die akzeptierte Antwort den Trick tun.
Ich bin darauf gestoßen und möchte nur meine eigene Lösung ohne linq teilen. Dies ist ein primitiver Ansatz. Nicht ganzzahlige Werte werden ebenfalls nicht zur Liste hinzugefügt.
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);
}
}
Hoffe das hilft.
Es ist einfach. Teilen Sie zuerst die Zeichenfolge. Leerzeichen nach Komma (,) kürzen. Verwenden Sie dann die vom System definierte ToList ()
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
Um das Leerzeichen nach ',' zu entfernen und diesen durch Kommas getrennten Text in Liste umzuwandeln
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();