web-dev-qa-db-fra.com

La différence entre + et & pour joindre des chaînes dans VB.NET

Quelle est la différence entre + et & pour joindre des chaînes dans VB.NET?

64
Rob P.

Il n'y a aucune différence si les deux opérandes sont des chaînes. Cependant, si un opérande est une chaîne et un est un nombre, vous rencontrez des problèmes, consultez le code ci-dessous.

"abc" + "def" = "abcdef"
"abc" & "def" = "abcdef"
"111" + "222" = "111222"
"111" & "222" = "111222"
"111" & 222 = "111222"
"111" + 222 = 333
"abc" + 222 = conversion error

Par conséquent, je recommande de toujours utiliser & lorsque vous voulez concaténer, car vous essayez peut-être de concaténer un entier, flottant, décimal en une chaîne, ce qui provoquera une exception, ou au mieux, ne fera pas ce que vous voulez probablement qu'il fasse.

84
Kibbee

L'opérateur & s'assure toujours que les deux opérandes sont des chaînes, tandis que l'opérateur + trouve la surcharge qui correspond aux opérandes.

L'expression 1 & 2 donne la valeur "12", tandis que l'expression 1 + 2 donne la valeur 3.

Si les deux opérandes sont des chaînes, il n'y a aucune différence dans le résultat.

13
Guffa

Aucun.

Comme vous pouvez le voir ci-dessous. Ces deux lignes de code se compilent exactement dans le même code IL:

Module Module1

Sub Main()
    Dim s1 As String = "s1"
    Dim s2 As String = "s2"
    s2 += s1
    s1 &= s2
End Sub

End Module

Compile vers (note 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
7
Aliostad

L'opérateur + peut être soit l'addition, soit la concaténation. Le & n'est qu'une concaténation. Si les expressions sont les deux chaînes, les résultats seraient les mêmes.

J'utilise & lorsque je travaille avec des chaînes et + lorsque je travaille avec des nombres, il n'y a donc jamais de confusion quant à mon intention. Si vous utilisez par erreur + et une expression est une chaîne et une est un nombre, vous courez le risque de résultats indésirables.

3
dbasnett

Il n'y a pas de différence dans la plupart des cas. Cependant, la meilleure pratique est:

"+" doit être réservé pour ajouts entiers, car si vous n'utilisez pas Option Strict On , alors vous pourriez ont vraiment gâché des situations telles que:

Input + 12 pourrait vous donner 20 au lieu de 812. Cela peut être particulièrement mauvais dans une application ASP.NET où l'entrée provient de POST/GET.

Autrement dit: Pour joindre des chaînes, utilisez toujours "&" au lieu de "+".

Évidemment, utilisez StringBuilder où cela convient:)

2
dr. evil

Si les deux types sont statiquement tapés à System.String , il n'y a aucune différence entre le code. Les deux se résoudront au membre String.Concat (c'est ce que + fait pour les chaînes).

Cependant, si les objets ne sont pas fortement typés en chaîne, la liaison tardive Visual Basic démarrera et suivra deux itinéraires très différents. Le + la version tentera d'effectuer une opération d'ajout qui tentera littéralement d'ajouter les objets. Cela fera toutes sortes de tentatives pour convertir les deux valeurs en un nombre, puis les ajoutera.

Le & L'opérateur tentera de concaténer. Le runtime Visual Basic passera par toutes sortes de conversions pour convertir les deux valeurs en chaînes. Il faudra alors String.Concat Les resultats.

1
JaredPar

Directement à partir de la documentation MSDN: Opérateurs de concaténation en Visual Basic

Différences entre les deux opérateurs de concaténation

L'opérateur + (Visual Basic) a pour principal objectif d'ajouter deux nombres. Cependant, il peut également concaténer des opérandes numériques avec des opérandes de chaîne. L'opérateur + possède un ensemble complexe de règles qui déterminent s'il faut ajouter, concaténer, signaler une erreur de compilation ou lever une exception InvalidCastException au moment de l'exécution.

L'opérateur & (Visual Basic) est défini uniquement pour les opérandes String et il élargit toujours ses opérandes à String, quel que soit le paramètre de l'option Strict. L'opérateur & est recommandé pour la concaténation de chaînes car il est défini exclusivement pour les chaînes et réduit vos chances de générer une conversion involontaire.

Faites confiance à MSDN! :-)

1
FranciscoBouza

Aucun lors de la jonction de chaînes:

    Dim string1 As String = "A" + "B"
    Dim string2 As String = "A" & "B"

    If string1.Equals(string2) And string2.Equals(string1) Then
        Debugger.Break()
    End If
0
Gavin Miller