4

我可以在 C# 中做到这一点..

int number = 2;
string str = "Hello " + number + " world";

..str 以“Hello 2 world”结尾。

在 VB.NET 我可以做到这一点..

Dim number As Integer = 2
Dim str As String = "Hello " + number + " world"

..但我得到一个 InvalidCastException “从字符串“Hello”到类型“Double”的转换无效。”

我知道在这两种情况下我都应该使用 .ToString() ,但是这里的代码是怎么回事?

4

4 回答 4

14

在 VB 中,我相信字符串连接运算符是 & 而不是 + 所以试试这个:

Dim number As Integer = 2
Dim str As String = "Hello " & number & " world"

基本上当 VB 看到 + 我怀疑它尝试进行数字加法或使用类型中定义的加法运算符(或者毫无疑问其他更复杂的事情,基于选项......)请注意,System.String没有定义加法运算符 - 它都是隐藏的在编译器中通过调用String.Concat. (这允许更有效地连接多个字符串。)

于 2008-11-07T08:32:39.110 回答
5

+Visual Basic 对和运算符进行了区分&&如果表达式不是字符串,则将转换为字符串。

&运算符 (Visual Basic)

操作员使用更复杂的+评估逻辑来确定最终转换成什么(例如,它受Option Strict配置等因素的影响)

+运算符 (Visual Basic)

于 2008-11-07T08:33:09.157 回答
3

如果可能的话,我建议远离原始字符串连接。

不错的选择是使用 string.format:

str = String.Format("Hello {0} workd", Number)

或者使用 System.Text.StringBuilder 类,它在更大的字符串连接上也更有效。

两者都自动将其参数转换为字符串。

于 2008-11-07T09:08:23.670 回答
1

VB 加号 (+) 运算符不明确。

如果您没有启用 Option Explicit,如果我没记错的话,可以这样做:

Dim str = 1 + "2"

并将 str 设为整数 = 3。

如果您明确需要字符串连接,请使用 & 运算符

Dim str = "Hello " & number & " world"

它会很乐意为您将数字转换为字符串。

我认为这种行为是为了向后兼容而保留的。

在 VB 中编程时,始终使用 & 符号来连接字符串。

于 2008-11-07T08:33:20.967 回答