Tengo un List<string>
, y algunas de estas cadenas son números. Quiero extraer este subconjunto en un List<int>
.Uso de LINQ para extraer entradas de una lista de cadenas
He hecho esto de una manera bastante detallada, como a continuación, pero me da la sensación de que debe haber una manera LINQ más ordenada de estructurar esto. ¿Algunas ideas?
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);
}
}
Obviamente no necesito una solución a esto - es principalmente para mi educación LINQ.
Otra ocasión que yo declare 'Deseo TryParse volvería un int?' (Lo sé, legado ...) –
ciertamente no más eficiente, pero podrías hacer 'var myInts = myStrs.Where (s => int.TryParse (s, out out)). Seleccionar (s => int.Parse (s)) ', siempre y cuando ya tengas outInt defined. Sin embargo, esto llama 'TryParse' * y * Parse en cada cadena, así que realmente no lo sugeriría – rejj
Esta pregunta podría ser de interés: [consulta LINQ para realizar una proyección, omitiendo casos en los que la proyección causaría una excepción] (http://stackoverflow.com/questions/7188623/linq-query-to-perform-a-projection-skipping-cases-where-the-projection-would-ca) Utilizo su caso exacto como ejemplo. –