2009-07-06 14 views
23

Ho visto diversi programmatori utilizzare & e + per la manipolazione di stringhe.Manipolazione stringa con & o + in VB.NET

Come ad esempio:

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

thirdvar = firstvar & secondvar 

O è:

thirdvar = firstvar + secondvar 

Ha importanza? Se è così, perché?

+0

Possibile duplicato * [La differenza tra + e & per unire le stringhe in VB.NET] (http://stackoverflow.com/questions/734600/the-difference-between-and-for-joining-strings- in-vb-net) *. –

risposta

48

I + e & operatori sono non identica VB.NET.

L'utilizzo dell'operatore & indica l'intenzione di concatenare stringhe, mentre l'operatore + indica l'intenzione di aggiungere numeri. L'utilizzo dell'operatore & convertirà entrambi i lati dell'operazione in stringhe. Quando si hanno tipi misti (un lato dell'espressione è una stringa, l'altro è un numero), l'utilizzo dell'operatore determinerà il risultato.

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' 

Quindi, la mia linea guida (a parte evitare i tipi di miscelazione del genere) è quello di utilizzare il & quando concatenazione di stringhe, solo per assicurarsi che le vostre intenzioni sono chiare al compilatore, ed evitare impossibili da trovare bug che coinvolgono utilizzando l'operatore + per concatenare.

+0

Grazie per il promemoria. Lo dimentico sempre (per i motivi che ho descritto nella mia nuova modifica). –

+0

Grazie per averlo chiarito! – ErocM

+0

Ben fatto Bdukes. Quindi, dopotutto, avevo ragione, anche se non lo sapevo, lol. –

2

La e commerciale è il metodo consigliato. L'operatore più funzionerà, a volte, per la concatenazione di stringhe, ma non è considerato corretto e occasionalmente produrrà risultati non previsti.

+0

Quali risultati non previsti? –

+0

Quando produrrà risultati indesiderati? Si prega di elaborare per avere una risposta completa. – jvanderh

+4

Questo non è più vero in VB.NET - VB6 e precedenti era in questo modo - vb.net utilizza l'operatore di runtime .NET + sulle stringhe, che è supportato perfettamente. & è un alias per questo in VB.NET. –

2

Sono identici in VB.NET quando si lavora con 2 stringhe. L'operatore "&" è disponibile per la compatibilità con le versioni precedenti in VB 6 e precedenti, dove & era l'operatore di concatenazione di stringhe e + non funzionava per il testo.

C'è una differenza se uno dei tuoi due operandi non è una stringa, come bdukes pointed out. Tuttavia, in questa situazione, consiglio vivamente di utilizzare String.Format o StringBuilder (in base al numero/tipi di operazioni) per costruire la stringa del risultato da tipi misti.

Nel complesso, consiglierei di usare +, per un singolo motivo. Se decidi di tradurre il codice in un'altra lingua (es: C#), l'operatore + corrisponderà maggiormente con la versione tradotta. Sarà probabilmente più facile per le persone che provengono da un'altra lingua capire e seguire il tuo codice.

+2

Non sono identici a VB.NET, vedere la mia risposta per le specifiche. – bdukes

+1

Un buon punto: me ne dimentico sempre (anche se non vedo mai di fare 1 e "2" come qualcosa che considero appropriato;)) –

+1

Risposta modificata per compensare. –

3

In generale, & concatenerà sempre stringhe indipendentemente dai tipi di argomenti, mentre + non lo farà. Poiché non c'è alcun inconveniente nell'usare & over + altrimenti, in situazioni in cui si desidera chiaramente concatenazioni di stringhe, è preferibile. Rende anche l'intento del codice leggermente più chiaro.

5

Considerare se si sta meglio utilizzando String.Format quando si concatenano le stringhe. Di solito, il codice finisce per avere più senso in questo modo.

Inoltre, se si concatenano più volte, si consiglia di utilizzare un oggetto StringBuilder anziché una stringa.

0

Indipendentemente dai numerosi suggerimenti per "attenersi a una O l'altra", dipende da pesantemente da ciò che si combina.

In breve, vorrei utilizzare "&" per archi e"+" solo per le operazioni aritmetiche

Perché? Date un'occhiata a https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/addition-operator#remarks

Tutte queste combinazioni con commutazione della -opzione rigorosa sono come tirare i dadi per il compilatore ... e non è mai ovvio per il lettore.

Vorrei anche aggiungere 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 l'affermazione chiara:

l'operatore + ha lo scopo primario di aggiungere due numeri.