Проблемы
Есть несколько возможных случаев возникновения ошибки:
Поскольку textBox1.Text
содержит только число, но число слишком большой / слишком маленький
Поскольку textBox1.Text
содержит:
- a) не число (кроме
space
вначало / конец, -
в начале) и / или - b) тысяча разделителей в применяемой культуре для вашего кода без указания
NumberStyles.AllowThousands
, или вы задаете NumberStyles.AllowThousands
, но неправильно вводите thousand separator
вкультура и / или - c) десятичный разделитель (который не должен существовать при разборе
int
)
НЕ ОК Примеры:
Дело 1
a = Int32.Parse("5000000000"); //5 billions, too large
b = Int32.Parse("-5000000000"); //-5 billions, too small
//The limit for int (32-bit integer) is only from -2,147,483,648 to 2,147,483,647
Дело 2 а)
a = Int32.Parse("a189"); //having a
a = Int32.Parse("1-89"); //having - but not in the beginning
a = Int32.Parse("18 9"); //having space, but not in the beginning or end
Дело 2 б)
NumberStyles styles = NumberStyles.AllowThousands;
a = Int32.Parse("1,189"); //not OK, no NumberStyles.AllowThousands
b = Int32.Parse("1,189", styles, new CultureInfo("fr-FR")); //not OK, having NumberStyles.AllowThousands but the culture specified use different thousand separator
Дело 2 с)
NumberStyles styles = NumberStyles.AllowDecimalPoint;
a = Int32.Parse("1.189", styles); //wrong, int parse cannot parse decimal point at all!
Казалось бы, НЕ ОК, но на самом деле ОК Примеры:
Случай 2 а) ОК
a = Int32.Parse("-189"); //having - but in the beginning
b = Int32.Parse(" 189 "); //having space, but in the beginning or end
Случай 2 b) ОК
NumberStyles styles = NumberStyles.AllowThousands;
a = Int32.Parse("1,189", styles); //ok, having NumberStyles.AllowThousands in the correct culture
b = Int32.Parse("1 189", styles, new CultureInfo("fr-FR")); //ok, having NumberStyles.AllowThousands and correct thousand separator is used for "fr-FR" culture
Решения
Во всех случаях, пожалуйста, проверьте значениеили textBox1.Text
с отладчиком Visual Studio и убедитесь, что он имеет чисто приемлемый числовой формат для диапазона int
.Примерно так:
1234
Кроме того, вы можете рассмотреть
- , используя
TryParse
вместо Parse
, чтобы гарантировать, что непарсированный номер не станет причиной вашего исключенияпроблема. проверьте результат TryParse
и обработайте его, если нет true
int val;
bool result = int.TryParse(textbox1.Text, out val);
if (!result)
return; //something has gone wrong
//OK, continue using val