Как я должен бросить в VB.NET?
все ли они равны? При каких обстоятельствах я должен выбрать каждого из них?
var.ToString ()
CStr (var)
CType (var, String)
DirectCast (var, String)
изменить: предложение от не себя...
- TryCast (var, String)
7 ответов:
все они немного отличаются и, как правило, имеют приемлемое использование.
var.
ToString
()
даст вам строковое представление объекта, независимо от того, какой это тип. Используйте это, еслиvar
- это уже не строка.CStr
(var)
- Это оператор приведения строки VB. Я не парень VB, поэтому я бы посоветовал избегать этого, но на самом деле это ничего не повредит. Я думаю, что это в основном то же самое, чтоCType
.CType
(var, String)
преобразует данный тип в строку, используя любые операторы преобразования.DirectCast
(var, String)
используется для приведения объекта в строку. Если вы знаете, что объектная переменная является, по сути, строкой, используйте это. Это то же самое, что(string)var
в C#.TryCast
(как упомянул @не себя) какDirectCast
, но это вернетсяNothing
если переменная не может быть преобразовано в строку, а не бросать исключение. Это то же самое, чтоvar as string
в C#. ЭлементTryCast
страница на MSDN также имеет хорошее сравнение.
Cstr()
компилируется inline для повышения производительности.
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, заключается в том, что вам не нужно возиться с накладными расходами исключений кастинга. Ваш бросок либо завершается успешно, либо ваша переменная инициализируется в null, и вы справляетесь с этим соответственно.
MSDN похоже, что приведения Cxxx для определенных типов могут повысить производительность в VB .NET, поскольку они преобразуются во встроенный код. По какой-то причине он также предлагает DirectCast в отличие от CType в некоторых случаях (в документации говорится, что это когда есть отношение наследования; я считаю, что это означает, что здравомыслие приведения проверяется во время компиляции и оптимизации могут быть применены, тогда как CType всегда использует VB во время выполнения.)
когда я пишу код VB .NET, то, что я использую, зависит от того, что я делаю. Если это прототип кода, который я собираюсь выбросить, я использую все, что я набираю. Если это код, о котором я серьезно, я пытаюсь использовать cxxx cast. Если он не существует, я использую DirectCast, если у меня есть разумное убеждение, что есть отношения наследования. Если это ситуация, когда я понятия не имею, если приведение должно быть успешным (пользовательский ввод -> целые числа, например), то я использую TryCast, чтобы что-то сделать более дружелюбный, чем бросать исключение на пользователя.
одна вещь, которую я не могу встряхнуть, - это то, что я обычно использую ToString вместо CStr, но предположительно Cstr быстрее.
пользователей Конрад Рудольф защитники для DirectCast() в вопросе переполнения стека "скрытые функции VB.NET".