Вопрос

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

  • вар.ToString()

  • CStr(вар)

  • CType(вар, строка)

  • DirectCast (вар, строка)


РЕДАКТИРОВАТЬ:Предложение от НеЯСам

  • TryCast(вар, строка)
Это было полезно?

Решение

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

  • var.ToString() предоставит вам строковое представление объекта, независимо от его типа.Используйте это, если var это уже не строка.
  • CStr(var) — это оператор приведения строк VB.Я не сторонник VB, поэтому я бы посоветовал избегать этого, но на самом деле это ничему не повредит.Я думаю, что это в принципе то же самое, что и CType.
  • CType(var, String) преобразует заданный тип в строку, используя любые предоставленные операторы преобразования.
  • DirectCast(var, String) используется для преобразования объекта в строку.Если вы знаете, что объектная переменная на самом деле является строкой, используйте это.Это то же самое, что (string)var в С#.
  • TryCast (как упоминалось @НеЯСам) как DirectCast, но оно вернется Nothing если переменную невозможно преобразовать в строку, вместо того, чтобы создавать исключение.Это то же самое, что var as string в С#. TryCast на странице MSDN также есть хорошее сравнение.

Другие советы

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

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

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

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

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

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

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

If str IsNot Nothing Then

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top