2015-03-18 5 views
3

Я бежал в эту схему несколько раз в проекте я работаю с:Почему int.Parse (NumericUpDown.Value.ToString())?

int myIntValue = int.Parse(myNumericUpDown.Value.ToString()); 

Это кажется немного бананы мне получить строку из десятичной, а затем разобрать строку, чтобы получить Int , и мне интересно, есть ли что-то, что мне не хватает, что требует этого. Похоже, он должен быть преднамеренным. Есть ли причина, по которой следует использовать вместо очевидного подхода:

int myIntValue = (int)myNumericUpDown.Value; 

Или:

int myIntValue = Convert.ToInt32(myNumericUpDown.Value); 
+0

Является ли человек, который написал этот код? Вы спросили их? – JLRishe

+1

Я бы сделал это как вы. :-) –

+0

Я видел намного хуже. Отправьте исходный код в TheDailyWTF и перепишите его, используя одну из предложенных вами реализаций. –

ответ

2

Конечно, мы не можем смотреть на ум программиста, который написал этот код на начальном этапе, но делать числовые конверсии по строкам довольно распространены с новыми программистами. Предположительно, они первые написали

int myIntValue = myNumericUpDown.Value 

получил ошибку компилятора, нашел Int32.Parse и положить кусочки вместе.

Существует действительно нет причина на всех, чтобы преобразовать его в строку, а затем разобрать целое число от этого - если что-то неэффективно и неудобно читать.

В самом деле заметим, что если по какой-либо причине ToString дает фактическое десятичное число (например, 3.0 вместо 3) код выбросит System.FormatException, который не поймал. Исходя из предположения, что вы не видите это исключение при запуске, я выхожу, что элемент управления установлен таким образом, что свойство Value всегда является целым числом, никогда не чем-то вроде 1.932, поэтому я бы сказал, что самый быстрый способ получить его как целое число жесткий литой

int myIntValue = (int)myNumericUpDown.Value; 

(и добавить try/catch неизбежного случае, если ваша форма дизайнер путает и устанавливает начальное значение элемента управления 0.5).

+0

Внедрение десятичного числа с дробной частью не приведет к исключению. Он будет округлен до нуля. И я согласен с утверждением бокибега о том, что 'Convert.ToInt32()' обычно будет предпочтительнее. – JLRishe

Смежные вопросы