* Тонкие * различия между функциями VB и Convert.В * функции?
-
05-09-2019 - |
Вопрос
При преобразовании типов я обнаружил, что использую как функции VB, так и BCL Convert.В * методы.
Например.)
Cstr()
против.Convert.ToString()
CInt()
против.Convert.ToInt32()
CDbl()
против.Convert.ToInt64()
- и т.д...
Существуют ли какие - либо тонкий различия, на которые следует обратить внимание?
Решение
Это уже было рассмотрено до того , как в принципе, но да, есть различия:по сути, помощники VB выполнят за вас дополнительную работу, чтобы выполнить синтаксический анализ там, где дженерики будут выдавать исключение, и в целом, но не повсеместно, помощники VB работают быстрее (хотя я не знаю, существенно ли это так), потому что на самом деле они просто IL sugar.Приправьте по вкусу.
Редактировать: Этот парень охватывает это лучше, чем я могу.
Редактировать Redux:Джоэл Коэхорн также рекомендует предшествующий вышеупомянутой статье, и, по-видимому, у него где-то припасен бенчмаркинг.
Джоэл написал:
Итог таков: CInt() - это оператор , в то время как Convert.ToInt32() - это функция.СИнт живет где-то в между (int)x;и Преобразовать.В int32(x);.
Другие советы
Есть еще одно большое отличие, которое я только что обнаружил и, думаю, стоит упомянуть здесь – хотя и через несколько лет после операции! CInt({Boolean expression})
оценивается в -1 , когда True
, тогда как Convert.ToInt<n>
оценивается в 1.
Это может привлечь внимание любого, кто использовал первое в математических оценках, НАПРИМЕР:
For i As Integer = 0 To 1 - CInt(processThirdItem) 'Evaluates to -1 (1 - -1 = 2)
'Do stuff...
Next
Итак, используя Convert.ToInt32
на месте CInt
не сработало бы, если бы вы не сменили оператора с -
Для +
.
Конечно.СЕТЬ замкнута If
функция теперь предоставляет гораздо лучший способ сделать это:
For i As Integer = 0 to If(processThirdItem, 2, 1)
'Do stuff...
Next