Pregunta sobre string, vb.net, .net – Manipulación de cadenas con & o + en VB.NET

24

He visto usar varios programadores& y+ para la manipulación de cuerdas.

Como:

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

thirdvar = firstvar & secondvar

O es eso:

thirdvar = firstvar + secondvar

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

Tu respuesta

6   la respuesta
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 cadenas, y + no funcionaba para el texto.

Hay una diferencia si uno de sus dos operandos no es una cadena, comobdukes señaló. Sin embargo, en esta situación, recomiendo usar String.Format o un StringBuilder (dependiendo del número / tipos de operaciones) para construir la cadena de resultados a partir 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 será más fácil para las personas que vienen de otro idioma entender y seguir su código.

Yo no recomendariaString.Format() Sobre todo, mucho menos el operador dedicado.&, para concatenar cuerdas. Yo tampoco recomendaríaStringBuilder cuando el número de cadenas de entrada se conoce de antemano, ya queString.Concat (Que es que& se expandirá a para invocaciones encadenadas) es más rápido, y& en sí será más claro. Pavel Minaev
Respuesta editada para compensar. Reed Copsey
Buen punto: siempre me olvido de eso (aunque no veo que hacer 1 y "2" sea algo que considero apropiado) Reed Copsey
Sonno idéntico en VB.NET, vea mi respuesta para detalles específicos. bdukes
@Pavel: No usaría string.format, si uno de sus operandos NO ES una cadena? Eso fue lo que sugerí explícitamente. Reed Copsey
52

los+ y& los operadores sonno Idéntico en VB.NET.

Utilizando la& operador indica su intención de concatenar cadenas, mientras que+ El operador indica su intención de sumar números. Utilizando la& El 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'

Por lo tanto, mi pauta (aparte de evitar tipos de mezclas como esa) es usar el& cuando concatene cadenas, solo para asegurarse de que sus intenciones sean claras para el compilador, y evite los errores imposibles de encontrar que involucran el uso de+ Operador para concatenar.

Las mejores prácticas de MS requieren y se utilizarán al concatenar cadenas. Buenas llamadas bdukes. Walter
Bien hecho bdukes. Así que tenía razón, después de todo, a pesar de que no lo sabía, jajaja. Bob Mc
Solo encontré un problema usando+ en lugar de&. Hizo algo como esto:<%# ResolveUrl("~/page.aspx?id=" + Eval("Id")) %>. Dado que ID es unInteger, VB intenta convertir el lado izquierdo (la URL) a un tipo numérico y lanza una excepción cuando no puede. bdukes
"El operador + indica su intención de agregar números" no es cierto. En general, indica su intención de agregar dos cosas juntas (¡no se olvide de la sobrecarga del operador!), Y funcionará bien para 2 cadenas. La única ventaja de& es que siempre dará como resultado una concatenación de cadenas, y convertirá todos los operandos en cadenas. Dicho esto, sigue siendo una ventaja, por lo que usarlo es una buena idea. Pavel Minaev
3

En general, & siempre concatenará cadenas independientemente de los tipos de argumentos, mientras que + no lo hará. Como no hay inconveniente en usar & over + de lo contrario, es preferible en situaciones en las que claramente desea concatenaciones de cadenas. También hace que la intención del código sea un poco más clara.

5

Considere si está mejor usando String.Format cuando concatene cadenas. Por lo general, el código termina teniendo más sentido de esa manera.

Además, si concatena muchas veces, considere usar un StringBuilder en lugar de un String.

2

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

Eso ya no es así en VB.NET - VB6 y anteriormente fue así: vb.net utiliza el operador + .NET Runtime en cadenas, que se admite perfectamente. & es un alias para esto en VB.NET. Reed Copsey
¿Qué resultados no deseados? Robert Harvey
Ver mi respuesta a continuación para el resultado no deseado bdukes
¿Cuándo producirá resultados no deseados? Por favor elabore para tener una respuesta completa. jvanderh
Reed es correcto, mi larga experiencia con VB6 me llevó a una respuesta no válida. He probado ambos en VB.Net y ambos funcionan correctamente. Sin embargo, todavía usaría el signo y para mayor claridad, como lo señaló otro póster. Bob Mc
0

Independientemente de los numerosos consejos para "atenerse a uno u otro", dependefuertemente lo que combinas

En resumen, yo usaría"&" para cuerdas y"+" solo para operaciones aritméticas

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

Todas estas combinaciones con alternar elestricto-opción son como tirar los dados para el compilador ... y nunca es obvio para el lector.

Yo tambien agregarehttps://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 declaración clara:

El operador + tiene el propósito principal de sumar dos números.

Preguntas relacionadas