Как мне использовать VB.NET?
Вопрос
Все ли они равны?При каких обстоятельствах мне следует предпочесть одно другому?
вар.ToString()
CStr(вар)
CType(вар, строка)
DirectCast (вар, строка)
РЕДАКТИРОВАТЬ:Предложение от НеЯСам…
- TryCast(вар, строка)
Решение
Все они немного отличаются и, как правило, имеют приемлемое использование.
var.
ToString
()
предоставит вам строковое представление объекта, независимо от его типа.Используйте это, еслиvar
это уже не строка.CStr
(var)
— это оператор приведения строк VB.Я не сторонник VB, поэтому я бы посоветовал избегать этого, но на самом деле это ничему не повредит.Я думаю, что это в принципе то же самое, что иCType
.CType
(var, String)
преобразует заданный тип в строку, используя любые предоставленные операторы преобразования.DirectCast
(var, String)
используется для преобразования объекта в строку.Если вы знаете, что объектная переменная на самом деле является строкой, используйте это.Это то же самое, что(string)var
в С#.TryCast
(как упоминалось @НеЯСам) какDirectCast
, но оно вернетсяNothing
если переменную невозможно преобразовать в строку, вместо того, чтобы создавать исключение.Это то же самое, чтоvar as string
в С#.TryCast
на странице MSDN также есть хорошее сравнение.
Другие советы
Cstr()
компилируется в реальном времени для повышения производительности.
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, заключается в том, что вам не нужно возиться с накладными расходами на приведение исключений.Ваше приведение либо будет успешным, либо ваша переменная будет инициализирована нулевым значением, и вы поступите с этим соответствующим образом.
MSDN кажется, указывает на то, что приведения Cxxx для определенных типов могут повысить производительность в VB .NET, поскольку они преобразуются во встроенный код.По какой-то причине это также предлагает ДиректКаст в отличие от CType в некоторых случаях (в документации указано, что это когда есть отношения наследования;Я считаю, что это означает, что правильность приведения проверяется во время компиляции и можно применять оптимизацию, тогда как CType всегда использует среду выполнения VB.)
Когда я пишу код VB .NET, то, что я использую, зависит от того, что я делаю.Если это код-прототип, который я собираюсь выбросить, я использую все, что наберу.Если я серьезно отношусь к этому коду, я пытаюсь использовать приведение Cxxx.Если его не существует, я использую DirectCast, если у меня есть основания полагать, что существует связь наследования.Если это ситуация, когда я понятия не имею, должно ли приведение быть успешным (например, пользовательский ввод -> целые числа), то я использую TryCast, чтобы сделать что-то более дружественное, чем выдавать пользователю исключение.
Единственное, от чего я не могу отказаться, так это то, что я склонен использовать ToString вместо CStr, но предположительно Cstr быстрее.
Пользователь Конрад Рудольф защитники для DirectCast() в вопросе переполнения стека «Скрытые возможности VB.NET».
Согласно сертификационному экзамену, вам следует по возможности использовать Convert.ToXXX() для простых преобразований, поскольку он оптимизирует производительность лучше, чем преобразования CXXX.
Однажды я помню, как видел состояние библиотеки MSDN для использования CStr(), потому что это было быстрее.Хотя я не знаю, правда ли это.