Все ли они равны? При каких обстоятельствах я должен выбирать друг друга?
var.ToString ()
CStr (вар)
CType (var, String)
DirectCast (var, String)
РЕДАКТИРОВАТЬ: Предложение от NotMyself ...
- TryCast (var, String)
Все ли они равны? При каких обстоятельствах я должен выбирать друг друга?
var.ToString ()
CStr (вар)
CType (var, String)
DirectCast (var, String)
РЕДАКТИРОВАТЬ: Предложение от NotMyself ...
Ответы:
Все они немного отличаются и обычно имеют приемлемое использование.
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 имеет хорошее сравнение, тоже.TryCast
работает только для типов значений, так как это должен быть тип, который может иметь Nothing
значение
CStr(var)
будет подавлять и вызывать исключение, если переменная DBNull.Value, но альтернатива Convert.ToString(var)
вернет пустую строку.
Dim myList AS ArrayList=new ArrayList
Когда пишешь (From e In myList select CType(e.Name,String)).ToArray()
это не работает. Я пришел, чтобы написать, ... select CType(e.Name.ToString,String)).ToArray()
и я восстановил свою улыбку.
Cstr()
компилируется для лучшей производительности.
CType
допускает приведение между типами, если определен оператор преобразования
ToString()
Между базовым типом и строкой выдается исключение, если преобразование невозможно.
TryParse()
Из String в base typeif
возможно, иначе возвращает false
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, заключается в том, что вам не нужно возиться с накладными расходами на приведение исключений. Ваше приведение либо выполнено успешно, либо ваша переменная инициализирована нулем, и вы справляетесь с этим соответственно.
.ToString()
. Тип значения, такой как Integer, не может быть Nothing. Таким образом, в этом случае CStr (число) или число. ToString () является безопасным. В общем случае (не только типы значений) CStr (что угодно) является безопасным, потому что он может ничего не обрабатывать - результатом будет Nothing в переменной String. TryCast очень полезен - только не здесь.
Пользователь Konrad Rudolph выступает за DirectCast () в вопросе переполнения стека "Скрытые возможности VB.NET" .
String
, маловероятно, что ОП обсуждал ситуацию, когда DirectCast подходит.
String
и ToString
моя жалоба не была бы применима. Вы не должны защищать DirectCast, пока вы не сузили тему от общего КОНВЕРСИЯ.
В соответствии с сертификационным экзаменом вы должны по возможности использовать Convert.ToXXX () для простых преобразований, поскольку он оптимизирует производительность лучше, чем преобразования CXXX.
Когда-то я помню, как видел состояние библиотеки MSDN, чтобы использовать CStr (), потому что это было быстрее. Я не знаю, правда ли это, хотя.