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

Все ли они равны? При каких обстоятельствах я должен выбирать друг друга?

  • var.ToString ()

  • CStr (вар)

  • CType (var, String)

  • DirectCast (var, String)


РЕДАКТИРОВАТЬ: Предложение от NotMyself...

  • TryCast(var, String)

7 ответов

Решение

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

  • 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 тоже имеет хорошее сравнение.

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

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

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

TryParse() От строки к базе typeif возможно в противном случае возвращает ложь

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

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

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

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

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

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

If str IsNot Nothing Then

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

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

В соответствии с сертификационным экзаменом вы должны по возможности использовать Convert.ToXXX() для простых преобразований, поскольку он оптимизирует производительность лучше, чем преобразования CXXX.

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

Другие вопросы по тегам