Mam więc IEnumerable<string>
, który może zawierać wartości, które można przeanalizować jako int
, a także wartości, które nie mogą być.Wybierz sparsowany int, jeśli ciąg znaków można sparsować do int
Jak wiadomo, Int32.Parse
zgłasza wyjątek, jeśli nie można zmienić ciągu znaków na int, a można użyć Int32.TryParse
do sprawdzenia, czy konwersja była możliwa bez czynienia wyjątku.
Tak więc chcę użyć kwerendy LINQ do jednego linijka parsować te ciągi, które mogą być przetwarzane jako int, bez rzucania wyjątku po drodze. Mam rozwiązanie, ale chciałbym uzyskać poradę od społeczności, czy jest to najlepsze podejście.
Oto co mam:
int asInt = 0;
var ints = from str in strings
where Int32.TryParse(str, out asInt)
select Int32.Parse(str);
Więc jak widać, używam asInt
jako przestrzeń zarysowania na wezwanie do TryParse
, żeby ustalić, czy TryParse
uda (Bool powrotny). Następnie, w projekcji, faktycznie wykonuję analizę. To jest brzydkie.
Czy jest to najlepszy sposób filtrowania wartości parsowanych w jednym wierszu za pomocą LINQ?
Można użyć 'asInt' bezpośrednio jako wybierz wartość. –
Prawo; wygląda na to, że odpowiedź Joe chwyta to. Właściwie to zmieniłem ją na moją akceptowaną odpowiedź, ponieważ jest bardziej zwięzła niż niektóre inne. –