VB.NET Простая арифметическая операция

У меня есть простая арифметика, которую нужно выполнить в VB.Net, а именно:

У меня есть m_Variable5 типа String = "325", которая передается из другого объекта. Операции;

m_Variable5 = Convert.ToString(Convert.ToInt32(m_Variable4, InvariantCulture) / 7, InvariantCulture)
m_Variable5 = Convert.ToString(Convert.ToInt32(m_Variable5, InvariantCulture) + 1, InvariantCulture)
m_Variable5 = Convert.ToString(Convert.ToInt32(m_Variable5, InvariantCulture) * 7, InvariantCulture)

Выполняя эти 3 операции, я получил ошибку типа во второй. Сообщение об ошибке говорит "Input string was not in a correct format."

но те же операции, выполняемые с использованием функций преобразования VB, работают правильно;

 m_Variable5 = CStr(CInt(m_Variable4) / 7)
 m_Variable5 = CStr(CInt(m_Variable5) + 1)
 m_Variable5 = CStr(CInt(m_Variable5) * 7)

Кто-нибудь может объяснить, почему я не могу использовать первый код, который больше подходит для платформы .Net?

Большое спасибо


person Nadeem_MK    schedule 13.03.2014    source источник
comment
Покажите короткую, но полную программу, демонстрирующую проблему. Вроде бы должно работать...   -  person Jon Skeet    schedule 13.03.2014
comment
Вот что меня беспокоит, это должно работать. Просто добавьте Dim m_Variable5 as string = "325" и отладьте 3 строки, вот увидите.   -  person Nadeem_MK    schedule 13.03.2014
comment
Что ж, я мог бы сделать это, добавив достаточно материала, чтобы превратить его в полную программу ... и все остальные, отвечающие на вопрос, могли бы. Или вы можете сделать эту работу один раз, чтобы любой желающий мог просто скопировать, вставить, скомпилировать и запустить. (Просто консольное приложение.) Это не займет у вас много времени, но это стоит сделать привычкой — это делает вопрос намного лучше, если любой, кто пытается ответить на него, может воспроизвести проблему за секунды.   -  person Jon Skeet    schedule 13.03.2014


Ответы (1)


Причина вашего исключения в том, что после выполнения первой строки вашего кода m_Variable5 = "46.4285714285714" ее нельзя преобразовать в Int32 с помощью функции Convert.ToInt32 во второй строке вашего кода.

Во втором примере он преобразуется, потому что вы используете оператор CInt. CInt (при передаче строки) выполняет больше работы, чем Convert.ToInt32. Лично я предпочитаю использовать CInt.

person Sargis Koshkaryan    schedule 13.03.2014
comment
Да, это было проверено, как указано в самом вопросе. Я хочу знать явную причину, по которой Convert.ToInt32 выдает ошибку! - person Nadeem_MK; 13.03.2014
comment
Согласно MSDN, Convert.ToInt32 выдает исключение, когда входной параметр не состоит из необязательного знака, за которым следует последовательность цифр (от 0 до 9). Функция CInt округляет параметр до ближайшего четного числа. Например, 3,5 округляется до 4. Явная причина заключается в реализации Convert.ToInt32 и CInt. - person Sargis Koshkaryan; 13.03.2014