Pergunta sobre vb.net, string, .net – Manipulação de strings com & ou + no VB.NET

24

Eu vi vários programadores usarem& e+ para manipulação de string.

Tal como:

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

thirdvar = firstvar & secondvar

Ou é:

thirdvar = firstvar + secondvar

Isso importa? Se sim, porque?

Sua resposta

6   a resposta
2

às vezes, para concatenação de strings, mas não é considerado correto e, ocasionalmente, produzirá resultados não intencionais.

Veja minha resposta abaixo para o resultado não intencional bdukes
Reed está certo, minha longa experiência no VB6 me levou a uma resposta inválida. Eu testei ambos em VB.Net e ambos funcionam corretamente. No entanto, eu ainda usaria o e comercial para maior clareza, conforme observado por outro pôster. Bob Mc
Quando irá produzir resultados não intencionais? Por favor, elabore para ter uma resposta completa. jvanderh
Isso não é mais verdade em VB.NET - VB6 e anterior foi assim - vb.net usa o operador + runtime do .NET runtime, que é suportado perfeitamente. & é um alias para isso em VB.NET. Reed Copsey
Quais resultados não intencionais? Robert Harvey
3

Em geral, & sempre concatenará strings independentemente dos tipos de argumentos, enquanto + não. Como não há desvantagem em usar & over + de outra forma, em situações em que você claramente deseja concatenações de strings, é preferível. Isso também torna a intenção do código um pouco mais clara.

52

o+ e& operadores sãonão idêntico em VB.NET.

Usando o& operador indica sua intenção de concatenar cadeias, enquanto o+ operador indica sua intenção de adicionar números. Usando o& operador irá converter ambos os lados da operação em seqüências de caracteres. Quando você tem tipos misturados (um lado da expressão é uma string, o outro é um número), seu uso do operador determinará o 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'

Então, minha diretriz (além de evitar misturar tipos como esse) é usar o& quando concatenando strings, apenas para ter certeza que suas intenções são claras para o compilador, e evitar erros impossíveis de encontrar envolvendo o uso+ operador para concatenar.

As melhores práticas da MS chamam para serem usadas quando concatenando strings. Boa chamada bdukes. Walter
Obrigado pela lembrança. Eu sempre esqueço disso (por motivos que descrevi em minha nova edição). Reed Copsey
Obrigado por esclarecer isso para mim! ErocM
Bdukes bem feitos. Então eu estava certo, apesar de não saber, lol. Bob Mc
5

Considere se você é melhor usar String.Format ao concatenar strings. Normalmente, o código acaba fazendo mais sentido.

Além disso, se você concatenar várias vezes, considere usar um StringBuilder em vez de uma String.

0

Independentemente das inúmeras dicas para "ficar com um ou o outro" - isso dependepesadamente o que você combina.

Em suma, eu usaria"&" para strings e"+" apenas para operações aritméticas

Por quê? Dê uma olhadahttps://docs.microsoft.com/pt-br/dotnet/visual-basic/language-reference/operators/addition-operator#remarks

Todas estas combinações com alternar origoroso-opção são como rolar os dados para o compilador ... e nunca é óbvio para o leitor.

Eu também adicionareihttp://www.google.com/support com a declaração clara:

O operador + tem o objetivo principal de adicionar dois números.

2

Eles são idênticos no VB.NET ao trabalhar com 2 strings. O operador "&" está lá para compatibilidade com versões anteriores no VB 6 e anterior, onde & era o operador de concatenação de strings, e + não funcionava para o texto.

Há uma diferença se um dos seus dois operandos não for uma string, comobdukes apontou. No entanto, nessa situação, é altamente recomendável usar String.Format ou StringBuilder (dependendo do número / tipos de operações) para construir a sequência de resultados de tipos mistos.

No geral, eu recomendaria usar +, por um único motivo. Se você decidir traduzir o código para outro idioma (por exemplo: C #), o operador + corresponderá mais com a versão traduzida. Provavelmente será mais fácil para as pessoas que vêm de outro idioma entender e seguir seu código.

Eu não recomendariaString.Format() sobre qualquer coisa, muito menos o operador dedicado&, para concatenar strings. Eu também não recomendariaStringBuilder quando o número de strings de entrada é conhecido antecipadamente,String.Concat (que é o que& expandirá para invocações encadeadas) é mais rápido e& em si será mais claro. Pavel Minaev
@Pavel: Você não usaria string.format, se um de seus operandos NÃO for uma string? Isso foi o que eu sugeri explicitamente. Reed Copsey
Eles sãonão idêntico em VB.NET, veja minha resposta para detalhes. bdukes
Resposta editada para compensar. Reed Copsey
Bom ponto - eu sempre esqueço disso (apesar de eu nunca ver fazer 1 e "2" como algo que eu considero apropriado);) Reed Copsey

Perguntas relacionadas