Вы столкнулись с этой проблемой при использовании метода int.Parse()
. Этот метод просто преобразует все, что вы передали ему как string
в int
. Итак, что-то вроде "33"
будет преобразовано, но что, если вы ввели что-то, что явно не является integer
, например "x"
или даже пустой строкой? значение 33
в int
введите без проблем.
int parseResultGood = int.Parse("33");
Но это не удастся и вызовет исключение, потому что, очевидно, "x"
не может быть преобразовано в целое число.
int parseResultBad = int.Parse("x");
К счастью, C#
предоставляет вам другой метод для более эффективной обработки, а именно метод int.TryPrase()
. Как следует из названия, пытается проанализировать значение и преобразовать его в int
, только если это возможно, и отправить его обратно вам в параметре out
, пока оно будет return true
. Если преобразование не удалось, скажем, из-за того, что вы передали нецелое значение как string
, оно будет return false
, а значение параметра out
будет zero
. Поэтому, основываясь на возвращаемом значении true/false
, вы можете узнать, было ли преобразование успешным или нет, и оно не вызовет исключения.
int tryParseResult = 0;
if (int.TryParse("X", out tryParseResult))
{
// Use the converted value
}
else
{
// Display an error message or something similar
}
Однако я предлагаю вам научиться отлаживать свою программу. Если бы вы это сделали, вы бы смогли выяснить проблему для себя. Статья, на которую были ссылки в комментариях, является отличной, пожалуйста, следуйте ей. Удачи!