Выберите проанализированный int, если строка была проанализирована до int

Итак, у меня есть IEnumerable , который может содержать значения, которые можно проанализировать как int , а также значения, которых не может быть.

Как вы знаете, Int32.Parse выдает исключение, если строка не может быть изменена на int, а Int32.TryParse можно использовать, чтобы проверить, возможно ли преобразование, без обработки исключения.

Итак, я хочу использовать LINQ-запрос для однострочного синтаксического анализа тех строк, которые могут быть проанализированы как int, без генерации исключения по пути. У меня есть решение, но я хотел бы получить совет от сообщества о том, является ли это наилучшим подходом.

Вот что у меня есть:

int asInt = 0;
var ints = from str in strings
           where Int32.TryParse(str, out asInt)
           select Int32.Parse(str);

Как видите, я использую asInt в качестве освободите место для вызова TryParse , просто чтобы определить, будет ли TryParse успешным (вернуть bool). Затем в проекции я фактически выполняю синтаксический анализ. Это выглядит некрасиво.

Это лучший способ отфильтровать анализируемые значения в одну строку с помощью LINQ?

48
задан Gilad Green 12 September 2017 в 08:35
поделиться