Как насчет:
int? TryParse(string s)
{
int i;
return int.TryParse(s, out i) ? (int?)i : (int?)null;
}
IEnumerable<int> XValuesFromFile(string filename)
{
return from line in ReadLines(filename)
let start = line.Substring(3,3)
let parsed = TryParse(start)
where parsed != null
select parsed.GetValueOrDefault();
}
Вы можете объединить вторую / третью строки, если хотите:
return from line in ReadLines(filename)
let parsed = TryParse(line.Substring(3,3))
Выбор GetValueOrDefault
заключается в том, что при этом пропускается проверка проверки, которую выполняет приведение (int)
или .Value
- т.е. это (очень-чуть) быстрее (и мы уже убедились, что это не так). null
).