Все они равны? При каких обстоятельствах я должен выбирать друг друга?Как я должен делать на VB.NET?
var.ToString()
CStr (вар)
CType (вар, String)
DirectCast (вар, String)
EDIT: Предложение от NotMyself & hellip;
- TryCast (вар, String)
Все они равны? При каких обстоятельствах я должен выбирать друг друга?Как я должен делать на VB.NET?
var.ToString()
CStr (вар)
CType (вар, String)
DirectCast (вар, String)
EDIT: Предложение от NotMyself & hellip;
Все они немного разные и обычно имеют приемлемое использование.
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.Я предпочитаю следующий синтаксис:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Хах вы можете сказать, что я обычно пишу код в C#. 8)
Причина, по которой я предпочитаю TryCast, вам не нужно возиться с накладными расходами исключений для литья. Ваш листинг либо преуспевает, либо ваша переменная инициализируется нулем, и вы соответствуете этому.
Я думаю, вы ошибаетесь. совсем не рекомендуется использовать TryCast. в таком случае, как ваш, следует использовать number.ToString() или CStr (число). – Shimmy 2010-11-09 00:35:31
@Shimmy: В чем причина не использования TryCast? Не лучше ли DirectCast избегать исключения в определенных сценариях? – Dienekes 2011-03-04 04:00:40
@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
MSDN, похоже, указывает, что приведение Cxxx для определенных типов может повысить производительность в VB .NET, поскольку они преобразуются во встроенный код.По некоторым причинам он также предлагает DirectCast в отличие от CType в некоторых случаях (в документах указано, что это когда отношения отношения наследования проверяются во время компиляции, и оптимизация может применяться, тогда как CType всегда использует VB runtime.)
Когда я пишу код VB .NET, то, что я использую, зависит от того, что я делаю. Если это прототип кода, который я собираюсь выбросить, я использую все, что я хочу напечатать. Если это код, о котором я серьезно отношусь, я стараюсь использовать Cxxx. Если этого не существует, я использую DirectCast, если у меня есть разумное убеждение, что есть отношение наследования. Если это ситуация, когда я понятия не имею, может ли кастинг быть успешным (пользовательский ввод -> целые числа, например), то я использую TryCast, чтобы сделать что-то более дружелюбное, чем бросить исключение пользователю.
Одна вещь, которую я не могу поколебать, я склонен использовать ToString вместо CStr, но, предположительно, Cstr быстрее.
В свое время я помню, что состояние библиотеки MSDN использовало CStr(), потому что оно было быстрее. Я не знаю, правда ли это.
Пользователь Konrad Rudolph защитник for DirectCast() in Stack Overflow question "Hidden Features of VB.NET".
Cstr()
скомпилирован для повышения производительности.
CType
позволяет слепки между типами, если оператор преобразования определен
ToString()
Между базовым типа и строки генерирует исключение, если преобразование невозможно.
TryParse()
Из строки основывать typeif
возможный в противном случае возвращает ложь
DirectCast
используется, если типы связаны через наследование или имеют общий интерфейс, будет сгенерировано исключение, если бросок не представляется возможным, trycast
не вернет ничего в этом Экземпляр
В соответствии с сертификационным экзаменом вы должны использовать Convert.ToXXX(), когда это возможно, для простых преобразований, поскольку оно оптимизирует производительность лучше, чем конверсии CXXX.
Никогда не нужно использовать CType (var, String) вместо CStr (var), они делают то же самое. – 2008-09-09 08:07:34
trycast явно не работает с Enums – Maslow 2009-05-22 13:12:34