Как вводить double с возможным/разрешённым значением Null?
мне нужно разрешить пустой ввод для дальнейшей проверки. я пробовал следующие методы, но в кжадом ошибка:
double? X= double?.Parse(Console.ReadLine());
double bag = Convert.ToDouble(Console.ReadLine(), ArgumentNullException);
Ответы (2 шт):
Автор решения: aepot
→ Ссылка
Если не удалось распарсить double, то будет присвоено null.
double? number = double.TryParse(Console.ReadLine(), out double n) ? n : (double?)null;
Но решение странное, double? в основном используют для десереализации данных, полученных извне. Для данных, полученных из консоли можно реализовать простую логику с ветвлением.
Console.Write("Введите число: ")
if (double.TryParse(Console.ReadLine(), out double number))
{
Console.WriteLine($"Вы ввели число {number}.");
}
else
{
Console.WriteLine($"Не удалось распознать число.");
}
Автор решения: VladD
→ Ссылка
Я бы воспользовался такой функцией:
static double? InputNumber() => Console.ReadLine() switch
{
null => throw new EndOfStreamException("No more input lines"),
"" => null,
var s when double.TryParse(s, out var d) => d,
var s => throw new FormatException($"Unrecognized value: {s}")
};
Обоснование: если ввод неправильный (не пустая строка и не число), имеет смысл возвращать не null, а строго сообщать об ошибке. Иначе неправильный ввод (например, число с неправильным десятичным разделителем) будет ошибочно распознан как валидный null.