strings - Cuerdas Concat por & y+en VB.Net
vb net concatenar strings (7)
¿Hay alguna diferencia entre los operadores & y + al concatenar cadenas? Si es así, entonces ¿cuál es la diferencia? Y si no, entonces ¿por qué debajo del código se genera una excepción?
Ejemplo:
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
& y + son operadores de concatenación, pero cuando se especifica un número entero mientras se usa +, vb.net intenta convertir "Hola" en un número entero para hacer una adición. Si cambia "Hola" con "123", obtendrá el resultado 124.
Como confirma su pregunta, son diferentes: &
es SOLO concatenación de cadenas, +
está sobrecargada con la adición y concatenación normales.
En tu ejemplo:
porque uno de los operandos a
+
es un entero VB intenta convertir la cadena en un entero, y como su cadena no es numérica, se lanza; y&
solo funciona con cadenas, por lo que el entero se convierte en una cadena.
Desde una anterior cadena de concatenación (sp?), Realmente debería considerar el uso de String.Format en lugar de concatenación.
Dim s1 As String
Dim i As Integer
s1 = "Hello"
i = 1
String.Format("{0} {1}", s1, i)
Hace las cosas mucho más fáciles de leer y mantener y creo que hace que su código se vea más profesional. Ver: código mejor - use string.format . Aunque no todos están de acuerdo ¿ Cuándo es mejor usar String.Format vs string concatenation?
Mis 2 centavos:
Si está concatenando una cantidad significativa de cadenas, debería utilizar StringBuilder en su lugar. OMI es más limpio y significativamente más rápido .
Probablemente tengas Option Strict activado (lo cual es bueno), y el compilador te está diciendo que no puedes agregar una cadena y un int. Prueba esto:
t = s1 & i.ToString()
Puedes escribir ''&'' para agregar una cadena y un entero:
processDetails=objProcess.ProcessId & ":" & objProcess.name
message = msgbox(processDetails,16,"Details")
la salida será:
5577:wscript.exe
-
&
solo se utiliza para la concatenación de cadenas. -
+
está sobrecargado para realizar tanto concatenación de cadenas como adición aritmética.
El doble propósito de +
conduce a la confusión, exactamente así en tu pregunta. Especialmente cuando Option Strict
está Off
, porque el compilador agregará conversiones implícitas en sus cadenas y enteros para tratar de darle sentido a su código.
Mis recomendaciones
- Definitivamente, debes activar
Option Strict On
, luego el compilador te obligará a agregar conversiones explícitas donde crea que son necesarias. - Debe evitar utilizar
+
para la concatenación debido a la ambigüedad con la suma aritmética.
Estas dos recomendaciones también se encuentran en el libro de Microsoft Press, Directrices prácticas y mejores prácticas para VB y C # (secciones 1.16, 21.2)