remove net metodos from dinamico array vb.net string

metodos - vb.net list



La diferencia entre+y & para unir cadenas en VB.NET (8)

¿Cuál es la diferencia entre + y & para unir cadenas en VB.NET?


Directamente desde la documentación de MSDN: operadores de concatenación en Visual Basic

Diferencias entre los dos operadores de concatenación

El + Operador (Visual Basic) tiene el propósito principal de agregar dos números. Sin embargo, también puede concatenar operandos numéricos con operandos de cadena. El operador + tiene un conjunto complejo de reglas que determinan si agregar, concatenar, señalar un error del compilador o lanzar una excepción InvalidCastException en tiempo de ejecución.

The & Operator (Visual Basic) está definido solo para operandos String, y siempre amplía sus operandos a String, independientemente de la configuración de Option Strict. El operador & se recomienda para la concatenación de cadenas porque está definido exclusivamente para cadenas y reduce las posibilidades de que genere una conversión involuntaria.

¡Confíe en MSDN! :-)


El operador & siempre se asegura de que ambos operandos sean cadenas, mientras que el operador + encuentra la sobrecarga que coincide con los operandos.

La expresión 1 & 2 da el valor "12", mientras que la expresión 1 + 2 da el valor 3.

Si ambos operandos son cadenas, no hay diferencia en el resultado.


El operador + puede ser suma o concatenación. El & es solo concatenación. Si las expresiones son ambas cadenas, los resultados serían los mismos.

Uso & cuando trabajo con cadenas, y + cuando trabajo con números, por lo que nunca hay confusión sobre mi intención. Si por error usa + y una expresión es una cadena y una es un número, corre el riesgo de obtener resultados no deseados.


Ninguna.

Como puede ver abajo. Estas dos líneas de código se compilan exactamente con el mismo 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


Ninguno al unir cadenas:

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


No hay diferencia en la mayoría de los casos. Sin embargo, la mejor práctica es:

"+" debe reservarse para adiciones de enteros , porque si no usa Option Strict On entonces podría haber realmente enredado situaciones tales como:

Input + 12 puede dar 20 lugar de 812 . Esto puede ser especialmente malo en una aplicación ASP.NET donde la entrada proviene de POST / GET.

En pocas palabras: para unir cadenas, siempre use "&" en lugar de "+".

Obviamente, use StringBuilder donde sea adecuado :)


No hay diferencia si ambos operandos son cadenas. Sin embargo, si un operando es una cadena, y uno es un número, entonces tiene problemas, vea el código a continuación.

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

Por lo tanto, le recomiendo utilizar siempre & cuando quiera concatenar, ya que podría tratar de concatenar un entero, flotante, decimal en una cadena, lo que provocará una excepción, o en el mejor de los casos, no hará lo que probablemente quiera hacer.


Si ambos tipos se escriben estáticamente en System.String , no hay diferencia entre el código. Ambos se resolverán con el miembro String.Concat (esto es lo que + hace para las cadenas).

Sin embargo, si los objetos no se escriben con fuerza en la cadena, el enlace tardío de Visual Basic se iniciará y se ejecutará en dos rutas muy diferentes. La versión + intentará hacer una operación de agregar que literalmente intenta agregar los objetos. Esto hará todo tipo de intentos para convertir ambos valores a un número y luego agregarlos.

El operador & intentará concatenar. El tiempo de ejecución de Visual Basic pasará por todo tipo de conversiones para convertir ambos valores en cadenas. A continuación, String.Concat los resultados.