繁体   English   中英

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

[英]Automatic casting to string in C# and VB.NET

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

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

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

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

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

&运算符(Visual Basic)

+运算符使用更复杂的评估逻辑来确定最终投射的内容(例如,它受Option Strict配置等影响)

+运算符(Visual Basic)

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

好的替代方案是使用string.format:

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

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

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

VB plus(+)运算符不明确。

如果你没有Option Explicit on,如果我的记忆正确,我可以这样做:

Dim str = 1 + "2"

并获得str作为整数= 3。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM