2009-07-06 16 views
23

He visto varios programadores usar & y + para la manipulación de cadenas.Manipulación de cadenas con & o + en VB.NET

Tales como:

dim firstvar as string 
dim secondvar as string 
dim thirdvar as string 

thirdvar = firstvar & secondvar 

O es:

thirdvar = firstvar + secondvar 

¿Importa? Si es así, ¿por qué?

+0

Posible duplicado * [La diferencia entre + y & para unir cadenas en VB.NET] (http://stackoverflow.com/questions/734600/the-difference-between-and-for- joining -strings- in-vb-net) *. –

Respuesta

48

Los + y & operadores son no idéntica en VB.NET.

El operador & indica su intención de concatenar cadenas, mientras que el operador + indica su intención de agregar números. El uso del operador & convertirá ambos lados de la operación en cadenas. Cuando tiene tipos mixtos (un lado de la expresión es una cadena, el otro es un número), su uso del operador determinará el resultado.

1 + "2" = 3 'This will cause a compiler error if Option Strict is on' 
1 & "2" = "12" 
1 & 2 = "12" 
"text" + 2 'Throws an InvalidCastException since "text" cannot be converted to a Double' 

lo tanto, mi guía (aparte de evitar los tipos de mezcla el estilo) es utilizar el & al concatenar cadenas, sólo para asegurarse de que sus intenciones son claras para el compilador, y evitar imposible de encontrar errores que implican utilizando el operador + para concatenar.

+0

Gracias por el recordatorio. Siempre me olvido de eso (por las razones que describí en mi nueva edición). –

+0

¡Gracias por aclarar eso para mí! – ErocM

+0

Bien hecho bdukes. Así que estaba en lo cierto después de todo, a pesar de que no lo sabía, jajaja. –

2

El ampersand es el método recomendado. El operador más funcionará, a veces, para la concatenación de cadenas, pero no se considera correcto y ocasionalmente producirá resultados no deseados.

+0

¿Qué resultados no deseados? –

+0

¿Cuándo producirá resultados involuntarios? Por favor elabore para tener una respuesta completa. – jvanderh

+4

Eso ya no es cierto en VB.NET - VB6 y versiones anteriores de esta manera - vb.net usa el operador + del operador de tiempo de ejecución .NET, que se admite perfectamente. & es un alias para esto en VB.NET. –

2

Son idénticos en VB.NET cuando se trabaja con 2 cadenas. El operador "&" está ahí para la compatibilidad con versiones anteriores en VB 6 y anteriores, donde & era el operador de concatenación de cadena, y + no funcionaba para el texto.

Existe una diferencia si uno de sus dos operandos no es una cadena, como bdukes pointed out. Sin embargo, en esta situación, recomiendo usar String.Format o StringBuilder (dependiendo del número/tipo de operaciones) para construir la cadena resultante de tipos mixtos.

En general, recomendaría usar +, por una sola razón. Si alguna vez decide traducir el código a otro idioma (es decir, C#), el operador + coincidirá más con la versión traducida. Probablemente sea más fácil para las personas que provienen de otro idioma comprender y seguir su código.

+2

No son idénticos en VB.NET; consulte mi respuesta para obtener más información. – bdukes

+1

Buen punto: siempre me olvido de eso (aunque nunca lo veo haciendo 1 y "2" como algo que considero apropiado;)) –

+1

Respuesta editada para compensar. –

3

En general, & siempre concatenará cadenas independientemente de los tipos de argumentos, mientras que + no lo hará. Dado que no hay ninguna desventaja en el uso de & en + de lo contrario, en situaciones donde claramente desea concatenaciones de cadenas, es preferible. También hace que la intención del código sea ligeramente más clara.

5

Considere si es mejor usar String.Format al concatenar cadenas. Por lo general, el código termina teniendo más sentido de esa manera.

Además, si concatenas muchas veces, considera usar StringBuilder en lugar de String.

0

Independientemente de los numerosos consejos para "adherirse a uno u otro" - depende en gran medida lo que combina.

En resumen, me gustaría utilizar "&" para las cadenas y "+" sólo para las operaciones aritméticas

¿Por qué? Echar un vistazo a https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/addition-operator#remarks

Todas estas combinaciones con alternar el -option estricta son como tirar los dados para el compilador ... y nunca es obvio para el lector.

yo también añadir https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/concatenation-operators#differences-between-the-two-concatenation-operators con la afirmación clara:

el operador + tiene el propósito principal de la suma de dos números.

Cuestiones relacionadas