Как я должен кастовать в VB.NET? - PullRequest
143 голосов
/ 03 сентября 2008

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

  • var.ToString ()

  • CStr (вар)

  • CType (var, String)

  • DirectCast (var, String)


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

  • TryCast (var, String)

Ответы [ 7 ]

147 голосов
/ 03 сентября 2008

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

  • 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 также имеет хорошее сравнение.
10 голосов
/ 25 ноября 2008

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

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

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

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

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

8 голосов
/ 03 сентября 2008

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

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

If str IsNot Nothing Then

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

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

7 голосов
/ 03 сентября 2008

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

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

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

4 голосов
/ 19 сентября 2008
1 голос
/ 16 марта 2011

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

0 голосов
/ 05 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...