Вы можете преобразовать свой существующий код, чтобы использовать метод int.TryParse
, который возвращает bool
, указывающий, является ли входная строка действительным числом (и устанавливает параметр out
в преобразованное значение):
Console.Write("\tBitte geben Sie ihre Rechenoperation ein: ");
string r_operation = Console.ReadLine();
int result = 0;
while (!int.TryParse(r_operation, out result))
{
Console.WriteLine("\tUngültige Eingabe. Bitte geben Sie nur Zahlen ein!");
Console.Write("\tBitte geben Sie ihre Rechenoperation ein: ");
r_operation = Console.ReadLine();
}
// When we exit the while loop, we know that 'r_operation' is a number,
// and it's value is stored as an integer in 'result'
Другой способ сделать это - инкапсулировать процесс получения строго типизированного числа от пользователя в метод.Вот один из них, который я использую:
private static int GetIntFromUser(string prompt, Func<int, bool> validator = null)
{
int result;
var cursorTop = Console.CursorTop;
do
{
ClearSpecificLineAndWrite(cursorTop, prompt);
} while (!int.TryParse(Console.ReadLine(), out result) ||
!(validator?.Invoke(result) ?? true));
return result;
}
private static void ClearSpecificLineAndWrite(int cursorTop, string message)
{
Console.SetCursorPosition(0, cursorTop);
Console.Write(new string(' ', Console.WindowWidth));
Console.SetCursorPosition(0, cursorTop);
Console.Write(message);
}
С помощью этих вспомогательных методов ваш код может быть уменьшен до:
int operation = GetIntFromUser("\tBitte geben Sie ihre Rechenoperation ein: ");
И если вы хотите добавить некоторые дополнительные ограничения, вспомогательный метод также принимаетв функции validator
(которая принимает int
и возвращает bool
, указывающий, действителен ли int
).Поэтому, если вы хотите ограничить число от 1
до 5
, вы можете сделать что-то вроде:
var result = GetIntFromUser("Enter a number from 1 to 5: ", i => i > 0 && i < 6);