Как я должен кастовать в VB.NET?
Все ли они равны? При каких обстоятельствах я должен выбирать друг друга?
var.ToString ()
CStr (вар)
CType (var, String)
DirectCast (var, String)
РЕДАКТИРОВАТЬ: Предложение от NotMyself...
- TryCast(var, String)
7 ответов
Все они немного отличаются и обычно имеют приемлемое использование.
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 тоже имеет хорошее сравнение.
Cstr()
компилируется для лучшей производительности.
CType
допускает приведение между типами, если определен оператор преобразования
ToString()
Между базовым типом и строкой выдается исключение, если преобразование невозможно.
TryParse()
От строки к базе typeif
возможно в противном случае возвращает ложь
DirectCast
используется, если типы связаны через наследование или совместно используют общий интерфейс, выдаст исключение, если приведение не возможно, trycast
ничего не вернется в этом случае
Кажется, MSDN указывает, что приведение Cxxx для определенных типов может повысить производительность в VB .NET, поскольку они преобразуются во встроенный код. По некоторым причинам, он также предлагает DirectCast в отличие от CType в некоторых случаях (в документации говорится, что это когда есть отношение наследования; я считаю, что это означает, что целостность приведения проверяется во время компиляции и может применяться оптимизация, тогда как CType всегда использует VB runtime.)
Когда я пишу код VB .NET, то, что я использую, зависит от того, что я делаю. Если это код прототипа, который я собираюсь выбросить, я использую то, что случайно наберу. Если это серьезный код, я пытаюсь использовать Cxxx. Если такового не существует, я использую DirectCast, если у меня есть разумное убеждение, что есть отношения наследования. Если это ситуация, когда я понятия не имею, должно ли произойти приведение (например, пользовательский ввод -> целые числа), тогда я использую TryCast, чтобы сделать что-то более дружественное, чем бросить исключение в пользователя.
Одна вещь, которую я не могу поколебать, это то, что я склонен использовать ToString вместо CStr, но предположительно Cstr работает быстрее.
Я предпочитаю следующий синтаксис:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Ха, вы можете сказать, что я обычно пишу код на C#. 8)
Причина, по которой я предпочитаю TryCast, заключается в том, что вам не нужно возиться с накладными расходами на приведение исключений Ваше приведение либо выполнено успешно, либо ваша переменная инициализирована нулем, и вы справляетесь с этим соответственно.
Пользователь Konrad Rudolph выступает за DirectCast() в вопросе переполнения стека "Скрытые возможности VB.NET".
В соответствии с сертификационным экзаменом вы должны по возможности использовать Convert.ToXXX() для простых преобразований, поскольку он оптимизирует производительность лучше, чем преобразования CXXX.
Когда-то я помню, как видел состояние библиотеки MSDN, чтобы использовать CStr(), потому что это было быстрее. Я не знаю, правда ли это, хотя.