CStr () Str () .ToString () - PullRequest
       2

CStr () Str () .ToString ()

26 голосов
/ 19 января 2012

Я просто хочу знать, в чем именно разница между функциями 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 () здесь не работает.Какая разница?заранее спасибо :))

Ответы [ 4 ]

33 голосов
/ 19 января 2012

ToString вызовет функцию .ToString() в конкретном экземпляре.На практике это означает, что будет выброшено исключение, если рассматриваемый объект Nothing.Однако вы можете реализовать .ToString() в своих собственных классах, чтобы получить полезное строковое представление вашего объекта, тогда как CType / CStr работает только со встроенными классами и интерфейсами.

CStr и CType ( выражение , строка) в точности эквивалентны (я не уверен, откуда у другого автора появилась идея, что CStr быстрее).Но на самом деле это не функции, а директивы компилятора, которые будут генерировать совершенно другой код в зависимости от объявления expression .В большинстве случаев эти директивы вызывают группу внутреннего VB-кода, который пытается получить разумную строку из выражения .

DirectCast ( выражение , String) предполагает, что рассматриваемое выражение действительно является String, и просто приводит его.Это самый быстрый из всех этих вариантов, но он выдаст исключение, если выражение отличается от String.

2 голосов
/ 18 октября 2017

Как дополнение к среде VBA / VB6, в которой у нас нет ToString():

  • Str() не известно о международном представительстве.Десятичный разделитель всегда представляет собой точку (.).

    Как уже упоминалось выше, в случае положительных значений префикс полученной строки ставится с пробелом.также существует Str$().Разница с Str() заключается в типе возвращаемого значения:

    Str() возвращает вариант типа string, Str$() возвращает строку.

    И Str$() немного быстрее, чем Str().

  • CStr() в отличие от знает о международном представительстве.Десятичный разделитель зависит от международных настроек Windows.

    Никакого дополнительного префикса для положительных значений не будет.

Так что если вам нужно преобразовать тип значения в строкуи должны обеспечить точку в качестве десятичного разделителя без префикса пробела , а затем использовать этот синтаксис:

Dim d As Double
d = 123.456

Dim s As String
s = Trim(Str$(d))
1 голос
/ 14 января 2017

Я не знаю о ToString () и я не знаю о VB.NET

Но в VB6 (Visual Basic 6):

Оба из Cstr () и Str () преобразуют значения в строку. но Cstr () лучше, потому что:

Str (): После преобразования в строку добавляет 1 пробел перед положительными числами. например: Str (22)> "22"

Cstr (): После преобразования в строку он никогда не добавляет указанное выше дополнительное пространство - для наилучшего результата используйте его с Trim () - Trim (Cstr (Variable))

0 голосов
/ 19 декабря 2017

Хотя это не проблема в коде, о котором идет речь, важно отметить, что Str() преобразует только числовые выражения в строку, в других случаях выдает ошибку, поэтому не используйте ее для преобразования значений в ячейке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...