C#和VB.NET中的自动转换为字符串

4
我能用C#来实现这个……
int number = 2;
string str = "Hello " + number + " world";

最终字符串为“Hello 2 world”。

在VB.NET中,我可以这样做。

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

..但我得到了一个InvalidCastException "将字符串“Hello”转换为类型“Double”无效。"

我知道在这两种情况下都应该使用.ToString(),但代码中发生了什么?


1
实际上,每当您需要格式化文本时,您不应该使用ToString,而应该使用String.Format。这样做会让您的国际用户感激不尽。 - OregonGhost
4个回答

14

在VB中,我相信字符串连接运算符是&而不是+,因此请尝试使用以下代码:

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

基本上,当 VB 看到 + 运算符时,它会尝试进行数值加法或使用类型定义的加法运算符(或者根据选项进行其他更复杂的操作…)。需要注意的是,System.String 不定义加法运算符 - 所有这些都被编译器隐藏起来,并调用 String.Concat 方法实现(这允许更高效地连接多个字符串)。

5
Visual Basic区分+&运算符。如果表达式不是字符串,&会将其转换为字符串。 &运算符(Visual Basic) +运算符使用更复杂的评估逻辑来确定最终转换成什么(例如它受到像Option Strict配置之类的影响)。 +运算符(Visual Basic)

3
我建议尽可能避免使用原始字符串拼接。
好的替代方法是使用string.format:
```python string.format("这是一个示例字符串,其中包含{}和{}。", "变量1", "变量2") ```
str = String.Format("Hello {0} workd", Number)

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

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


1

VB中的加号(+)运算符是有歧义的。

如果你没有开启Option Explicit选项,如果我没记错的话,可能会出现这种情况:

Dim str = 1 + "2"

并将str作为整数返回= 3。

如果您明确想要字符串连接,请使用和号运算符

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

它会愉快地为您将数字转换为字符串。

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

当您在VB中编程时,请始终使用“&”来连接字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接