Почему в 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 и поместить его в двойную переменную.

Другие вопросы по тегам