[英]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区分了+
和&
运算符。 如果表达式不是字符串, &
将转换为字符串。
+
运算符使用更复杂的评估逻辑来确定最终投射的内容(例如,它受Option Strict配置等影响)
如果可能的话,我建议远离原始字符串连接。
好的替代方案是使用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.