CStr()Str().ToString()

问题描述 投票:26回答:4

我只是想知道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()函数在这里不起作用。它有什么不同?提前致谢 :))

vb.net string
4个回答
33
投票

ToString将在特定实例上调用.ToString()函数。实际上,这意味着如果有问题的对象是Nothing,它将抛出异常。但是,您可以在自己的类中实现.ToString()以获得对象的有用字符串表示,而CType / CStr仅适用于内置类和接口。

CStr和CType(表达式,字符串)完全相同(我不确定其他海报在哪里得到CStr更快的想法)。但它们不是真正的函数,它们是编译器指令,它们将根据表达式声明发出非常不同的代码。在大多数情况下,这些指令调用一堆内部VB代码,试图从表达式中获取合理的字符串。

DirectCast(表达式,String)假定所讨论的表达式确实是一个String并且只是强制转换它。它是所有这些选项中最快的,但如果表达式不是String,则会抛出异常。


2
投票

作为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
投票

我不知道ToString(),我不知道VB.NET

但在VB6(Visual Basic 6)中:

Cstr()和Str()都将值转换为字符串。但是Cstr()更好,因为:

Str():转换为字符串后,它会在正数之前添加1个空格。例如:Str(22)>“22”

Cstr():转换为字符串后,它永远不会添加上面的额外空格 - 为了获得最佳结果,请使用Trim() - Trim(Cstr(Variable))


0
投票

虽然问题中的代码不是问题,但重要的是要提到Str()只将数字表达式转换为字符串,在其他情况下给出错误,因此不要用它来转换单元格的值。

© www.soinside.com 2019 - 2024. All rights reserved.