A diferença entre + e & para unir strings no VB.NET

Qual é a diferença entre + e & para unir strings no VB.NET?

Não há diferença se ambos os operandos forem strings. No entanto, se um operando for uma string e um for um número, você terá problemas, veja o código abaixo.

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

Portanto, eu recomendo sempre usar & quando você quer concatenar, porque você pode estar tentando concatenar um inteiro, float, decimal para uma string, o que causará uma exceção, ou na melhor das hipóteses, não fazer o que você provavelmente quer fazer.

O operador & sempre garante que ambos os operandos sejam strings, enquanto o operador + localiza a sobrecarga que corresponde aos operandos.

A expressão 1 & 2 fornece o valor “12”, enquanto a expressão 1 + 2 fornece o valor 3.

Se ambos os operandos forem strings, não haverá diferença no resultado.

Nenhum.

Como você pode ver abaixo. Essas duas linhas de código compilam exatamente para o mesmo código IL:

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

Compila para (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 

O operador + pode ser adição ou concatenação. O & é apenas concatenação. Se as expressões forem ambas strings, os resultados serão os mesmos.

Eu uso e quando trabalho com strings e + quando trabalho com números, então nunca há confusão sobre minha intenção. Se você usa erroneamente + e uma expressão é uma string e uma é um número, você corre o risco de resultados não desejados.

Não há diferença na maioria dos casos. No entanto, a melhor prática é:

“+” deve ser reservado para adições inteiras , porque se você não usar Option Strict On , você pode ter realmente atrapalhado situações como:

Input + 12 pode dar 20 vez de 812 . Isso pode ser especialmente ruim em um aplicativo ASP.NET em que a input vem do POST / GET.

Basta colocar: para juntar strings, use sempre “&” em vez de “+”.

Obviamente, use StringBuilder onde é adequado 🙂

Se ambos os tipos são estaticamente typescript para System.String , há diferença zero entre o código. Ambos serão resolvidos para o membro String.Concat (isto é o que o + faz para strings).

No entanto, se os objects não forem typescripts com rigidez em seqüência, a binding tardia do Visual Basic entrará em ação e percorrerá duas rotas muito diferentes. A versão + tentará fazer uma operação de adição que literalmente tenta adicionar os objects. Isso fará todos os tipos de tentativas de converter ambos os valores em um número e, em seguida, adicioná-los.

O operador & tentará concatenar. O tempo de execução do Visual Basic passará por todos os tipos de conversões para converter ambos os valores em cadeias de caracteres. Ele irá então String.Concat os resultados.

Diretamente da documentação do MSDN: Operadores de concatenação no Visual Basic

Diferenças entre os dois operadores de concatenação

O operador + (Visual Basic) tem o objective principal de adicionar dois números. No entanto, ele também pode concatenar operandos numéricos com operandos de cadeia. O operador + tem um conjunto complexo de regras que determinam se adicionar, concatenar, sinalizar um erro do compilador ou lançar uma exceção InvalidCastException em tempo de execução.

O & Operator (Visual Basic) é definido apenas para operandos String, e sempre amplia seus operandos para String, independentemente da configuração do Option Strict. O operador & é recomendado para concatenação de strings porque é definido exclusivamente para strings e reduz suas chances de gerar uma conversão não intencional.

Não confie no MSDN! 🙂

Nenhum ao juntar strings:

  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