Все ли они равны? При каких обстоятельствах я должен выбирать каждый из них?
-
var.ToString()
-
CStr (вар)
-
CType (var, String)
-
DirectCast (var, String)
EDIT: предложение от NotMyself & hellip;
- TryCast (var, String)
Все ли они равны? При каких обстоятельствах я должен выбирать каждый из них?
var.ToString()
CStr (вар)
CType (var, String)
DirectCast (var, String)
EDIT: предложение от NotMyself & hellip;
Все они немного разные и обычно имеют приемлемое использование.
var.
ToString
()
собирается дать вам строковое представление объекта, независимо от того, какой он тип. Используйте это, если var
уже не строка.CStr
(var)
- оператор строковой трансляции VB. Я не парень VB, поэтому я бы предложил избегать этого, но на самом деле это ничего не повредит. Я думаю, что это в основном то же самое, что CType
.CType
(var, String)
преобразует данный тип в строку, используя любые предоставленные операторы преобразования.DirectCast
(var, String)
используется для добавления объекта в строку. Если вы знаете, что объектная переменная является, по сути, строкой, используйте это. Это то же самое, что и (string)var
в С#.TryCast
(как упоминается @NotMyself), как DirectCast
, но он вернет Nothing
, если переменная не может быть преобразована в строку, а не выбрасывает исключение. Это то же самое, что и var as string
в С#. На странице TryCast
в MSDN также есть хорошее сравнение. Cstr()
скомпилирован для повышения производительности.
CType
позволяет выполнять трансляции между типами, если определен оператор преобразования
ToString()
Между базовым типом и строкой создается исключение, если преобразование невозможно.
TryParse()
От String до base typeif
возможно в противном случае возвращает false
DirectCast
используется, если типы связаны через наследование или совместно используют общий интерфейс, генерирует исключение, если приведение не возможно, trycast
ничего не вернет в этом экземпляре
Я предпочитаю следующий синтаксис:
Dim number As Integer = 1
Dim str As String = String.TryCast(number)
If str IsNot Nothing Then
Вы можете сказать, что я обычно пишу код на С#. 8)
Причина, по которой я предпочитаю TryCast, - вам не нужно возиться с накладными расходами исключений для литья. Ваш листинг либо успешно, либо ваша переменная инициализируется нулем, и вы соответствуете этому.
MSDN, как представляется, указывает, что Cxxx для определенных типов может повысить производительность в VB.NET, потому что они преобразуются во встроенный код. По какой-то причине он также предлагает DirectCast в отличие от CType в некоторых случаях (в документах указывается это, когда есть отношение наследования, я считаю, что это означает, что разумность приведения проверяется во время компиляции, и оптимизация может применяться, тогда как CType всегда использует время выполнения VB.)
Когда я пишу код VB.NET, то, что я использую, зависит от того, что я делаю. Если это прототип кода, который я собираюсь выбросить, я использую все, что бы я ни напечатал. Если это код, я серьезно, я пытаюсь использовать Cxxx. Если этого не существует, я использую DirectCast, если у меня есть разумное убеждение, что существуют отношения наследования. Если это ситуация, когда я не знаю, будет ли преуспевание (пользовательский ввод → целые числа, например), то я использую TryCast, чтобы сделать что-то более дружелюбное, чем бросить исключение у пользователя.
Одна вещь, которую я не могу поколебать, я склонен использовать ToString вместо CStr, но, предположительно, Cstr быстрее.
Пользователь Конрад Рудольф защищает для DirectCast() в вопросе "Скрытые возможности VB.NET" .
В соответствии с сертификационным экзаменом вы должны использовать Convert.ToXXX(), когда это возможно, для простых преобразований, поскольку он оптимизирует производительность лучше, чем конверсии CXXX.
В свое время я помню, что состояние библиотеки MSDN использовало CStr(), потому что оно было быстрее. Я не знаю, правда ли это.