web-dev-qa-db-fra.com

Chaînes de concat par & et + en VB.Net

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
23
Javed Akram

& 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.

30
N. Hodin
  • & 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

  • Vous devez absolument activer Option Strict On, le compilateur vous obligera alors à ajouter des conversions explicites là où il le jugera nécessaire. 
  • Vous devez éviter d'utiliser + 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) 

20
MarkJ

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.

2
Mark Hurd

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
0
Ewan

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
0
Shubham Verma