CStr() Str().ToString()
Я просто хочу знать, что именно разница между функциями CStr() и Str(), а также .ToString()? С приведенным ниже кодом, какая разница между тремя?
Label1.Text = CStr(Int(Rnd() * 10))
и
Label1.Text = Str(Int(Rnd() * 10))
и
Label1.Text = Int(Rnd() * 10).ToString
Когда я использовал это условие
If Label1.Text = "7" Then
'Some code here
End If
... функция Str() здесь не работает. Какая разница?
спасибо заранее:))
Ответы
Ответ 1
ToString вызовет функцию .ToString()
на конкретном экземпляре.
На практике это означает, что он будет генерировать исключение, если объект в
вопрос Nothing
. Однако вы можете реализовать .ToString()
в своих собственных
классов, чтобы получить полезное строковое представление вашего объекта, тогда как
CType
/CStr
работает только со встроенными классами и интерфейсами.
CStr и CType (выражение, String) эквивалентны (я не
где другой плакат понял, что CStr
быстрее). Но они
на самом деле не являются функциями, они - директивы компилятора, которые будут издавать очень
другой код в зависимости от объявления выражения. В большинстве
случаев, эти директивы называют кучу внутреннего кода VB, который пытается
получить разумную строку из выражения.
DirectCast (выражение, String) предполагает, что выражение в
вопрос действительно есть String
и просто отбрасывает его. Это самый быстрый из всех
эти опции, но будет генерировать исключение, если выражение есть что-либо
кроме a String
.
Ответ 2
В качестве дополнения к среде VBA/VB6, где у нас нет ToString()
:
-
Str()
не осознает международного представительства. Десятичный разделитель всегда является точкой (.
).
Как уже упоминалось выше, он префикс результирующей строки с пробелом в случае положительных значений.
-
Существует также Str$()
. Разница в Str()
- это возвращаемый тип:
Str()
возвращает вариант строки типа, Str$()
возвращает строку.
И Str$()
немного быстрее, чем Str()
.
-
CStr()
напротив понимает международное представительство. Десятичный разделитель зависит от международных настроек Windows.
Никакой дополнительный префикс для положительных значений не будет выполнен.
Итак, если вам нужно преобразовать тип значения в строку и обеспечить точку в виде разделителя с десятичной запятой и без префикса пустой, используйте этот синтаксис:
Dim d As Double
d = 123.456
Dim s As String
s = Trim(Str$(d))
Ответ 3
Я не знаю о ToString(), и я не знаю о VB.NET
Но в VB6 (Visual Basic 6):
Оба Cstr() и Str() преобразуют значения в строку. но Cstr() лучше, потому что:
Str(): После преобразования в строку он добавляет 1 пробел до положительных чисел. например: Str (22) > "22"
Cstr(): После преобразования в строку он никогда не добавляет лишнее пространство. Для лучшего результата используйте его с Trim() - Trim (Cstr (Variable))
Ответ 4
Хотя это не проблема в коде в вопросе, важно отметить, что Str()
преобразует только числовые выражения в строку, дает ошибку в других случаях, поэтому не используйте его для преобразования значений ячейки.