2008-09-02 14 views

ответ

135

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

  • 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.
+15

Никогда не нужно использовать CType (var, String) вместо CStr (var), они делают то же самое. – 2008-09-09 08:07:34

+0

trycast явно не работает с Enums – Maslow 2009-05-22 13:12:34

8

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

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

If str IsNot Nothing Then 

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

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

+1

Я думаю, вы ошибаетесь. совсем не рекомендуется использовать TryCast. в таком случае, как ваш, следует использовать number.ToString() или CStr (число). – Shimmy 2010-11-09 00:35:31

+4

@Shimmy: В чем причина не использования TryCast? Не лучше ли DirectCast избегать исключения в определенных сценариях? – Dienekes 2011-03-04 04:00:40

+2

@Dienekes и NotMyself. TryCast предназначен только для типов ССЫЛКИ. Здесь мы имеем целое число, которое является типом VALUE. Компилятор отклонит TryCast. Кроме того, целью является String. Любой объект. Net, кроме Nothing, поддерживает `.ToString()`. Тип значения, например Integer, не может быть Nothing. Таким образом, в этом случае CStr (число) или number.ToString() является безопасным. В общем случае (не только типы значений) CStr (независимо) безопасен, поскольку он может обрабатывать Nothing - результат будет Nothing, в переменной String. TryCast очень полезен - просто не здесь. – ToolmakerSteve 2014-03-19 03:05:23

7

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

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

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

0

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

9

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

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

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

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

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

1

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