Ho uno List<string>
e alcune di queste stringhe sono numeri. Voglio estrarre questo sottoinsieme in un List<int>
.Utilizzo di LINQ per estrarre int da un elenco di stringhe
Ho fatto questo in modo abbastanza prolisso - come di seguito - ma ho la sensazione che ci debba essere un LINQ più ordinato per strutturarlo. Qualche idea?
List<string> myStrs = someListFromSomewhere;
List<int> myInts = new List<int>();
foreach (string myStr in myStrs)
{
int outInt;
if (int.TryParse(myStr, out outInt))
{
myInts.Add(outInt);
}
}
Ovviamente non ho bisogno una soluzione a questo - è soprattutto per la mia formazione LINQ.
Un'altra occasione per me di dichiarare 'Vorrei TryParse sarebbe tornato un int?' (Lo so, legacy ...) –
certamente non più efficiente, ma si potrebbe fare 'var myInts = myStrs.Where (s => int.TryParse (s, out outInt)). Select (s => int.Parse (s)) ', a patto che tu abbia già definito OutInt. Ciò chiama 'TryParse' * e * Parse su ogni stringa, anche se - quindi non lo suggerirei veramente – rejj
Questa domanda potrebbe essere di interesse: [Query LINQ per eseguire una proiezione, saltando i casi in cui la proiezione causerebbe un'eccezione] (http://stackoverflow.com/questions/7188623/linq-query-to-perform-a-projection-skipping-cases-where-the-projection-would-ca) Uso il tuo caso esatto come esempio. –