Как я должен бросить в 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".