Как мне включить в VB.NET?

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

  • var.ToString()

  • CStr (вар)

  • CType (var, String)

  • DirectCast (var, String)


EDIT: предложение от NotMyself & hellip;

  • TryCast (var, String)

Ответ 1

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

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

Ответ 2

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

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

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

TryParse() От String до base typeif возможно в противном случае возвращает false

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

Ответ 3

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

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

If str IsNot Nothing Then

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

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

Ответ 4

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

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

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

Ответ 6

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

Ответ 7

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