Tengo un IEnumerable<string>
que puede contener valores que se pueden analizar como int
, así como valores que no pueden ser.Seleccionar int analizado, si la cadena fue parseable a int
Como usted sabe, Int32.Parse
arroja una excepción si una cadena no se puede cambiar a un int, mientras que Int32.TryParse
se puede utilizar para verificar y ver si la conversión era posible sin tener en cuenta la excepción.
Así que quiero utilizar una consulta LINQ para analizar las cadenas que pueden analizarse como int, sin lanzar una excepción en el camino. Tengo una solución, pero me gustaría recibir consejos de la comunidad sobre si este es el mejor enfoque.
Esto es lo que tengo:
int asInt = 0;
var ints = from str in strings
where Int32.TryParse(str, out asInt)
select Int32.Parse(str);
Así como se puede ver, estoy usando asInt
como un espacio reservado para la llamada a TryParse
, sólo para determinar si tendrían éxito TryParse
(return bool). Luego, en la proyección, en realidad estoy realizando el análisis. Eso se siente feo
¿Es esta la mejor manera de filtrar los valores parseables en una línea utilizando LINQ?
puede usar 'asInt' directamente como el valor de selección. –
Derecha; parece que la respuesta de Joe capta eso. De hecho, lo cambié a mi respuesta aceptada, ya que es más conciso que algunos de los otros. –