Concat字符串由&和VB.Net中的+

时间:2011-01-12 15:04:14

标签: vb.net concatenation

和&之间有什么区别吗?和串联字符串时的+运算符? 如果有,那么有什么区别?如果不是,那么为什么下面的代码生成异常?

示例:

    Dim s, s1, t As String
    Dim i As Integer

    s1 = "Hello"
    i = 1

    s = s1 & i
    t = s1 + i  //Exception here

    If s = t Then
        MessageBox.Show("Equal...")
    End If

8 个答案:

答案 0 :(得分:31)

&安培;和+都是连接运算符,但是当你使用+时指定一个整数时,vb.net会尝试将“Hello”转换为整数来进行添加。如果您使用“123”更改“Hello”,您将得到结果124。

答案 1 :(得分:21)

  • &仅用于字符串连接。
  • 重载
  • +以进行字符串连接和算术加法。

+的双重目的会导致混淆,与您的问题完全相同。特别是当Option StrictOff时,因为编译器会在字符串和整数上添加隐式强制转换以尝试理解您的代码。

我的建议

  • 你绝对应该转向Option Strict On,然后编译器将强制你在认为必要时添加显式强制转换。
  • 由于算术加法的模糊性,您应该避免使用+进行连接。

这些建议也出现在Microsoft Press书Practical Guidelines And Best Practises for VB and C#中(第1.16,21.2节)

答案 2 :(得分:4)

你可能已经启用了Option Strict(这是一件好事),编译器告诉你不能添加字符串和int。试试这个:

t = s1 & i.ToString()

答案 3 :(得分:2)

正如您的问题所证实的那样,它们是不同的:&只是字符串连接,+超载了正常的加法和连接。

在你的例子中:

  • 因为+的一个操作数是一个整数VB试图将字符串转换为整数,并且因为你的字符串不是数字,它会抛出;以及

  • &仅适用于字符串,因此整数将转换为字符串。

答案 4 :(得分:0)

你可以写'&'添加字符串和整数:

processDetails=objProcess.ProcessId & ":" & objProcess.name
message = msgbox(processDetails,16,"Details")

输出将是:

5577:wscript.exe

答案 5 :(得分:0)

尝试一下。似乎很简单是正确的。只需将Integer转换为字符串即可。然后,您可以使用下面的方法或进行串联。

Dim I, J, K, L As Integer
Dim K1, L1 As String

K1 = K
L1 = L
Cells(2, 1) = K1 & " - uploaded"
Cells(3, 1) = L1 & " - expanded"

MsgBox "records uploaded " & K & " records expanded " & L

答案 6 :(得分:-1)

从以前的字符串连接符(sp?)开始,你应该考虑使用String.Format而不是连接。

    Dim s1 As String
    Dim i As Integer
    s1 = "Hello"
    i = 1
    String.Format("{0} {1}", s1, i)

它使得阅读和维护更容易,我相信使您的代码看起来更专业。见:code better – use string.format。虽然不是每个人都同意When is it better to use String.Format vs string concatenation?

答案 7 :(得分:-1)

我的2美分:

如果要连接大量字符串,则应该使用StringBuilder。 IMO它更清洁,显着更快