Existe-t-il une différence entre les opérateurs & et + lors de la concaténation d'une chaîne? Si oui, quelle est la différence? Et si non, alors pourquoi une exception générant du code?
Exemple:
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
& et + sont tous deux des opérateurs de concaténation, mais lorsque vous spécifiez un entier lorsque vous utilisez +, vb.net tente de convertir "Hello" en entier pour effectuer une addition. Si vous modifiez "Bonjour" avec "123", vous obtiendrez le résultat 124.
&
est utilisé uniquement pour la concaténation de chaînes. +
est surchargé pour effectuer à la fois la concaténation de chaînes et l'addition arithmétique.Le double objectif de +
est source de confusion, exactement comme dans votre question. Surtout lorsque Option Strict
est Off
, car le compilateur ajoutera des conversions implicites sur vos chaînes et entiers pour tenter de donner un sens à votre code.
Mes recommandations
Option Strict On
, le compilateur vous obligera alors à ajouter des conversions explicites là où il le jugera nécessaire. +
pour la concaténation en raison de l'ambiguïté de l'addition arithmétique. Ces deux recommandations figurent également dans le livre Microsoft Press Instructions pratiques et meilleures pratiques pour VB et C # (sections 1.16, 21.2)
Comme votre question le confirme, elles sont différentes: &
est UNIQUEMENT une concaténation de chaînes, +
est surchargé d’addition normale et de concaténation.
Dans votre exemple:
car l'un des opérandes à +
est un entier VB tente de convertir la chaîne en entier, et comme votre chaîne n'est pas numérique, elle est renvoyée; et
&
ne fonctionne qu'avec des chaînes, donc l'entier est converti en chaîne.
Essaye ça. Cela semblait presque simple d'avoir raison. Convertissez simplement l'entier en chaîne. Ensuite, vous pouvez utiliser la méthode ci-dessous ou concaténer.
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
Vous pouvez écrire '&' pour ajouter une chaîne et un entier:
processDetails=objProcess.ProcessId & ":" & objProcess.name
message = msgbox(processDetails,16,"Details")
la sortie sera:
5577:wscript.exe