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


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

  • var.ToString ()

  • CStr (var)

  • CType (var, String)

  • DirectCast (var, String)


изменить: предложение от не себя...

  • TryCast (var, String)
7 136

7 ответов:

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

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

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

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, заключается в том, что вам не нужно возиться с накладными расходами исключений кастинга. Ваш бросок либо завершается успешно, либо ваша переменная инициализируется в null, и вы справляетесь с этим соответственно.

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

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

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

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

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