Quindi ho uno IEnumerable<string>
che può contenere valori che possono essere analizzati come int
, nonché valori che non possono essere.Selezionare pars int, se stringa è stata analizzabile in int
Come noto, Int32.Parse
genera un'eccezione se una stringa non può essere modificata in int, mentre Int32.TryParse
può essere utilizzata per controllare e verificare se la conversione fosse possibile senza trattare l'eccezione.
Quindi voglio utilizzare una query LINQ per analizzare un solo liner quelle stringhe che possono essere analizzate come int, senza generare un'eccezione lungo la strada. Ho una soluzione, ma vorrei chiedere consiglio alla comunità se questo è l'approccio migliore.
Ecco quello che ho:
int asInt = 0;
var ints = from str in strings
where Int32.TryParse(str, out asInt)
select Int32.Parse(str);
Quindi, come potete vedere, sto usando asInt
come spazio scratch per la chiamata a TryParse
, proprio per determinare se TryParse
sarebbe successo (bool ritorno). Quindi, nella proiezione, sto effettivamente eseguendo l'analisi. È brutto.
È questo il modo migliore per filtrare i valori analizzabili in una riga utilizzando LINQ?
È possibile utilizzare 'asInt' direttamente come il valore di selezione. –
Giusto; assomiglia alla risposta di Joe. In realtà ho cambiato la mia risposta accettata dal momento che è più concisa di alcuni degli altri. –