Почему в C# Console.ReadLine() хранит только строку?
Почему Console.ReadLine() не может хранить int/double в C#? В отличие от "cin >>" в C++, который может хранить что угодно в зависимости от переменной.
4 ответа
Разные языки, разные библиотеки, разные API, разные дизайнерские решения и т. Д.
cin.operator>>
передается ссылка для использования параметра out, и он перегружен для этого типа параметра. Console.ReadLine
возвращает значение и не перегружается.
Вы можете написать свой собственный метод расширения для Console
как, скажем, GetValue
, которому передается выходной параметр и перегружается на столько типов, сколько вы хотите.
Консоль изначально является просто вводом текста. Console.ReadLine()
(и другие методы) не выполняют синтаксический анализ за вас, а вместо этого оставьте это на ваше усмотрение, чтобы проанализировать себя.
Это имеет преимущество, однако, в том, что упрощает аккуратную обработку случаев ошибок (если вы хотите читать в двойном формате, а пользователь, например, вводит "foo").
Потому что читать строку безопаснее. Это предотвращает такие ошибки, как плохие данные в C++, когда в результате состояние потока становится ошибочным.
Это правда, что Console.ReadLine() хранит строки, потому что это так. Но вы можете проверить свой ввод и выполнить приведение к нужному типу.
например, вы можете сделать так:
string sen = Console.ReadLine();
int b;
int.TryParse(sen, out b);
Console.WriteLine(b);
Вы можете использовать приведенный выше код, чтобы получить ввод, а затем поместить результат b как int. Например, если ввод не был числом, тогда b сохранит 0.
Если вы хотите, чтобы это удвоилось, вы должны сделать double.TryParse и поместить его в двойную переменную.