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

本文关键字:转换 字符串 VB NET | 更新日期: 2023-09-27 17:48:49

我可以在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(),但代码的现状是什么?

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

在VB中,我认为字符串串联运算符是&而不是+,所以试试这个:

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

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

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

&操作员(Visual Basic)

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

+操作员(Visual Basic)

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

好的替代方案是使用字符串格式:

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

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

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

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

如果你没有打开Option Explicit,如果我的记忆力很好,可以这样做:

Dim str = 1 + "2"

并得到整数为3的str。

如果您明确希望字符串串联,请使用与号运算符

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

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

我认为这种行为是为了向后兼容性。

在VB中编程时,请始终使用"与"符号连接字符串。