Я пытаюсь прочитать в файле, который по существу представляет собой список целых чисел, разделенных линией. Очевидно, что вход в файл никогда нельзя доверять, поэтому мне нужно отфильтровать нецелые числа.Простой способ чтения целых чисел из файла
Я знаю, что оператор as
обычно преобразует, если он может, а затем присваивает нуль, однако из-за int
не NULLABLE это ISN Это дело. Я подумал, что, может быть, я могу бросить на Nullable<int>
. Я действительно никогда не вникал в это, я думал, возможно, я мог бы сделать:
var lines = File.ReadAllLines("");
var numbers = lines.Select(line => line as int?).Where(i => i != null);
Я знаю, что я мог бы получить потенциально обойти эту проблему, выполнив:
var numbers = lines.Select(line =>
{
int iReturn = 0;
if (int.TryParse(line, out iReturn))
return iReturn;
else
return null;
}).Where(i => i != null);
Я также потенциально мог бы сделать это как способ расширения.
Я просто искал аккуратный, лаконичный способ сделать актерский состав в заявлении, а также понять, почему мой код недействителен.
Nope. C# намеренно осторожно относится к подобным вещам. –
@ColonelPanic это, вероятно, есть, но почему, если я обрабатываю тот факт, что он потенциально может быть нулевым, это не вслух? В чем разница между этим и отбрасыванием 'Foo object'' как '' Bar object'? – LukeHennerley
Кроме того, если защита защищена от вредоносного ввода, вызов File.ReadAllLines (...) должен быть заменен перечислителем (или эквивалентной функциональностью), который считывает строки и проверяет их последовательно и ограничивает их длину. –