* Тонкие * Различия между функциями VB и функциями Convert.To *? - PullRequest
10 голосов
/ 19 февраля 2009

При преобразовании типов я обнаружил, что использую и функции VB, и методы BCL Convert.To *. Например)

  • Cstr() против Convert.ToString()
  • CInt() против Convert.ToInt32()
  • CDbl() против Convert.ToInt64()
  • и т.д ...

Есть ли тонкие различия, которые следует отметить?

Ответы [ 2 ]

10 голосов
/ 19 февраля 2009

Это было покрыто до в принципе, но да, есть различия: в основном, помощники VB сделают для вас дополнительную работу, чтобы получить анализ, где генерики будут генерировать исключение, и в общем не всегда VB помощники работают быстрее (хотя я не знаю, насколько это существенно), потому что на самом деле они просто IL-сахар. Сезон по вкусу.


Редактировать: Этот парень освещает это лучше, чем я.

Редактировать Redux: Джоэл Коухорн также рекомендует предшественник к вышеприведенной статье , и, по-видимому, где-то в тесте где-то в тесте.

Джоэл писал:

Резюме: CInt () оператор, в то время как Convert.ToInt32 () является функция. Город живет где-то в между (int) x; а также Convert.ToInt32 (х);.

2 голосов
/ 17 января 2014

Есть еще одна большая разница, которую я только что обнаружил, и я думаю, что стоит упомянуть здесь - хотя и через несколько лет после ОП! 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 в .NET теперь предоставляет гораздо лучший способ сделать это:

For i As Integer = 0 to If(processThirdItem, 2, 1)
    'Do stuff...
Next 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...