Как я должен кастовать в VB.NET?

Является ли lib.dll 32-разрядной DLL? Ваша программа на C # будет запускаться на x64 изначально, но не сможет загрузить 32-разрядные библиотеки DLL. Вы можете попробовать изменить целевой процессор проекта C # на «x86», чтобы заставить его работать под WOW64.

143
задан Community 23 May 2017 в 11:54
поделиться

6 ответов

Те все немного отличаются, и обычно имеют приемлемое использование.

  • var. ToString () собирается дать Вам строковое представление объекта, независимо от того, каково тип это. Используйте это, если var уже не строка.
  • CStr (var) строковый оператор броска VB. Я не парень VB, таким образом, я предложил бы избежать его, но это действительно не собирается повреждать что-либо. Я думаю, что это - в основном то же как CType.
  • CType (var, String) преобразует данный тип в строку, использование любого обеспечило операторы преобразования.
  • DirectCast (var, String) привык к восходящему объект в строку. Если Вы знаете, что переменная объекта является, на самом деле, строкой, используйте это. Это совпадает с (string)var в C#.
  • TryCast (как упомянуто NotMyself) похож DirectCast, но он возвратится Nothing, если переменная не может быть преобразована в строку, вместо того, чтобы выдать исключение. Это совпадает с var as string в C#. TryCast страница на MSDN имеет хорошее сравнение, также.
147
ответ дан Community 23 May 2017 в 11:54
поделиться
  • 1
    Я записал код для фильтрации диаграммы. Это использовало плавания и заняло 11 секунд. То, когда я преобразовал в использование, удваивается, потребовалось 5 секунд. Это находится на Galaxy Note. – intrepidis 10 August 2013 в 10:20

Я предпочитаю следующий синтаксис:

Dim number As Integer = 1
Dim str As String = String.TryCast(number)

If str IsNot Nothing Then

Ха можно сказать, что я обычно пишу код в C#. 8)

причина я предпочитаю, чтобы TryCast был Вами, не должны смешивать с издержками кастинга исключений. Ваш бросок или успешно выполняется или Ваша переменная, инициализируется к пустому указателю, и Вы имеете дело с этим соответственно.

8
ответ дан Ry- 23 May 2017 в 11:54
поделиться

MSDN, кажется, указывает, что броски Cxxx для определенных типов могут улучшить производительность в.NET VB, потому что они преобразовываются во встроенный код. По некоторым причинам это также предлагает DirectCast в противоположность CType в определенных случаях (состояния документации, которые это - когда существуют отношения наследования; я полагаю, что это означает, что исправность броска проверяется во время компиляции, и оптимизация может быть применена, тогда как CType всегда использует время выполнения VB.)

то, Когда я пишу код.NET VB, что я использую, зависит от того, что я делаю. Если это - код прототипа, я собираюсь выбросить, я использую то, что я, оказывается, ввожу. Если это - код, я серьезно отношусь к, я пытаюсь использовать бросок Cxxx. Если Вы не существуете, я использую DirectCast, если у меня есть разумная вера, что существуют отношения наследования. Если это - ситуация, где я понятия не имею, должен ли бросок успешно выполниться (ввод данных пользователем-> целые числа, например), то я использую TryCast, чтобы сделать что-то более дружественное, чем бросок исключение в пользователе.

Одна вещь, которую я не могу встряхнуть, я склонен использовать ToString вместо CStr, но предположительно Cstr быстрее.

7
ответ дан OwenP 23 May 2017 в 11:54
поделиться

Когда-то, я не забываю видеть состояние библиотеки MSDN для использования CStr (), потому что это было быстрее. Я не знаю, верно ли это все же.

0
ответ дан joek1975 23 May 2017 в 11:54
поделиться
  • 1
    @EJP и @Merlyn - самые искренние извинения. я исправил свое сообщение. в книге действительно говорится, что они - половина размера, таким образом, мне казалось, что будет, указал на своего рода увеличение эффективности. по-видимому, я был неправ. – dylan murphy 6 June 2011 в 02:57
  • 1
    Это ничего не означает, если большая часть устройства хранения данных заканчивает тем, что находилась в регистрах ЦП, и регистр является достаточно большим для содержания также и использует то же количество инструкций. – Merlyn Morgan-Graham 3 June 2011 в 20:59

Cstr() компилируется встроенный для лучшей производительности.

CType допускает броски между типами, если оператор преобразования определяется

ToString() Между базовым типом, и строка выдает исключение, если преобразование не возможно.

TryParse() От Строки для базирования typeif возможный иначе возвращает false

DirectCast используемый, если типы будут связаны через наследование или совместно используют единый интерфейс, то выдаст исключение, если бросок не будет возможен, [то 116] ничего не возвратит в этом экземпляре

10
ответ дан Siddharth Rout 23 May 2017 в 11:54
поделиться
  • 1
    в большинстве современной архитектуры удваивается, часто, по крайней мере, с такой скоростью, как плавания или еще быстрее – phuclv 7 May 2014 в 04:21
Другие вопросы по тегам:

Похожие вопросы: