* Тонкие * различия между функциями VB и Convert.В * функции?

StackOverflow https://stackoverflow.com/questions/566147

Вопрос

При преобразовании типов я обнаружил, что использую как функции 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 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top