在VB.NET中连接字符串的+
和&
有什么不同?
发布于 2009-04-09 15:02:51
如果两个操作数都是字符串,则没有区别。但是,如果一个操作数是一个字符串,而另一个是一个数字,那么就会遇到问题,请参见下面的代码。
"abc" + "def" = "abcdef"
"abc" & "def" = "abcdef"
"111" + "222" = "111222"
"111" & "222" = "111222"
"111" & 222 = "111222"
"111" + 222 = 333
"abc" + 222 = conversion error
因此,我建议在连接时始终使用&
,因为您可能正在尝试将整数、浮点数、小数连接到字符串,这将导致异常,或者最好的情况下,不会执行您可能希望它执行的操作。
发布于 2009-04-09 15:01:06
&运算符始终确保两个操作数都是字符串,而+运算符查找与操作数匹配的重载。
表达式1 & 2
给出值"12",而表达式1+2给出值3。
如果两个操作数都是字符串,则结果没有区别。
发布于 2010-09-14 03:32:03
没有。
正如你在下面看到的。这两行代码完全编译为相同的CIL代码:
Module Module1
Sub Main()
Dim s1 As String = "s1"
Dim s2 As String = "s2"
s2 += s1
s1 &= s2
End Sub
End Module
编译为(注意System.String::Concat
):
.method public static void Main() cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
// Code size 31 (0x1f)
.maxstack 2
.locals init ([0] string s1,
[1] string s2)
IL_0000: nop
IL_0001: ldstr "s1"
IL_0006: stloc.0
IL_0007: ldstr "s2"
IL_000c: stloc.1
IL_000d: ldloc.1
IL_000e: ldloc.0
IL_000f: call string [mscorlib]System.String::Concat(string,
string)
IL_0014: stloc.1
IL_0015: ldloc.0
IL_0016: ldloc.1
IL_0017: call string [mscorlib]System.String::Concat(string,
string)
IL_001c: stloc.0
IL_001d: nop
IL_001e: ret
} // end of method Module1::Main
https://stackoverflow.com/questions/734600
复制相似问题