string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Questo non funziona sì che il metodo split restituisce una stringa []Come posso convertire virgola stringa separata in un elenco <int>
prega di aiuto.
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Questo non funziona sì che il metodo split restituisce una stringa []Come posso convertire virgola stringa separata in un elenco <int>
prega di aiuto.
Ecco un modo per farlo:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Questo potrebbe anche essere 'Elenco
È necessario il' nuovo Elenco <> '? – LiquidPony
@LiquidPony no; potresti invece chiamare 'ToList()'; il risultato è essenzialmente lo stesso: 'Elenco
È possibile utilizzare LINQ w/int.Parse()
per convertire il string[]
a un IEnumerable<int>
e quindi passare tale risultato al List<T>
costruttore:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
Un po 'di LINQ ha una lunga strada:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Se si sta utilizzando C# 3.5 è possibile utilizzare LINQ per raggiungere questo obiettivo
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
o quello corto
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();
Senza LINQ Query, è possibile scegliere questo metodo,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
e quindi è possibile convertire questo elenco in numero intero t ipo ...
Se si desidera includere qualche semplice validazione e saltare valori non validi (invece di lanciare un'eccezione), ecco qualcosa che utilizza 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: Ecco un aggiornamento query basata sul feedback di Antoine. Prima chiama TryParse per filtrare eventuali valori errati, quindi Parse per eseguire la conversione effettiva.
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
Errore se 0 è un ingresso legit! –
Ho apportato una modifica alla risposta di khalid13. Se l'utente inserisce una stringa di "0", la sua risposta rimuoverà quella dall'elenco risultante. Ho fatto qualcosa di simile ma ho usato un oggetto anonimo.
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 è una funzione personalizzata creata che protegge se la stringa è nullo.
Quanto sopra non esclude le stringhe che non potevano essere convertite senza errori. Se hai bisogno di errore se c'è stato un problema con la conversione, allora la risposta accettata dovrebbe fare il trucco.
Mi sono imbattuto in questo e voglio solo condividere la mia soluzione senza linq. Questo è un approccio primitivo. I valori non interi non verranno aggiunti anche nell'elenco.
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);
}
}
Spero che questo aiuti.
possibile duplicato di [Come creare un elenco da una stringa separata da virgole?] (Http: // stackoverflow.it/questions/910119/how-to-create-a-listt-from-a-comma-separated-string) –
Lijo
Possibile duplicato di [Converti una stringa separata da virgola di int in array int] (https://stackoverflow.com/ domande/1763613/convert-comma-separated-string-of-ints-to-int-array) – Lijo