string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Questo non funziona perché il metodo split restituisce una stringa []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Questo non funziona perché il metodo split restituisce una stringa []
Risposte:
Ecco un modo per farlo:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
invece; il risultato è essenzialmente lo stesso: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
devi fare l'uno o l'altro, però, perché il valore di ritorno di Select()
è un IEnumerable<>
, ma non unList<>
Select
estensione in questo caso ritorna IEnumerable<Int32>
e non è un elenco. Comunque la lista ha un costruttore che accetta un'altra collezione come sorgente.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Se desideri includere una semplice convalida e saltare valori non validi (anziché generare 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 una query aggiornata basata sul feedback di Antoine. Chiama TryParse prima 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
Modifica 2: una query aggiornata per C # 7.0, grazie al feedback di Charles Burns. Si noti che ci liberiamo della variabile mos aggiuntiva con questo approccio, quindi è un po 'più pulito.
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 _)
Puoi usare LINQ w / int.Parse()
per convertire il string[]
in an IEnumerable<int>
e poi passare quel risultato al List<T>
costruttore:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Un piccolo LINQ fa molta strada:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Senza LINQ Query, puoi scegliere questo metodo,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
e quindi puoi convertire questo elenco in tipo intero ...
.ToList<string>()
ancora bisognousing 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()
, poiché Parse taglia automaticamente i caratteri dello spazio per te.
Se stai usando C # 3.5 puoi usare 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();
Ho apportato una modifica alla risposta di khalid13. Se l'utente inserisse una stringa di "0", la sua risposta lo rimuoverà 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 che ho creato che protegge se la stringa è nulla.
Ciò che fa sopra è eliminare tutte le stringhe che non sono state in grado di essere convertite senza errori. Se devi sbagliare se si è verificato un problema con la conversione, 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 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 ti aiuti.
È semplice. Dividi prima la stringa. Taglia spazio vuoto presente dopo la virgola (,). Quindi utilizzare ToList definito dal sistema ()
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
Per rimuovere lo spazio dopo ',' e convertire questo testo separato da virgola in Elenco
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();