2009-07-30 16 views
24

Su ogni sito che parla di VBScript, l'operatore '&' è elencato come operatore di concatenazione di stringhe. Tuttavia, in qualche codice che ho ereditato di recente, vedo l'operatore '+' in uso e non vedo errori di conseguenza. È un'alternativa accettata?Qual è la differenza tra VBScript + e operatore?

risposta

37

L'operatore + è sovraccarico, mentre l'operatore & non lo è. L'operatore & esegue solo concatenazioni di stringhe. In alcuni ambienti l'operatore & viene utilizzato come procedura consigliata poiché non è ambiguo e pertanto non può avere effetti indesiderati a causa dell'overloading.

+0

* 'L'operatore + è sovraccarico' * - * sovraccarico * in che senso? – Wolf

+3

@wolf in VB l'operatore + può eseguire sia l'aggiunta che la concatenazione, a seconda del contesto. –

+1

Beh, ho già letto questo. Ho trovato la parola * overloaded * stessa così sovraccaricata che ho desiderato, la risposta potrebbe essere un po 'più precisa in questo punto. – Wolf

6

+ L'operatore può ritorcersi contro quando le stringhe possono essere interpretate come numeri. Se non vuoi che brutte sorprese usi & per concatenare le stringhe.

27

L'operatore & esegue la concatenazione di stringhe, ovvero obbliga gli operandi a convertirsi in stringhe (ad esempio prima chiama CStr). +, a sua volta, forza l'addizione se una delle espressioni è numerica. Per esempio:

1 & 2 

ti dà 12, mentre

1 + 2 
"1" + 2 
1 + "2" 

darvi 3.

Quindi, si consiglia di utilizzare & per la concatenazione di stringhe poiché elimina l'ambiguità.

+3

+1 per specificare numero di stringa + numero. La risposta accettata non menziona vbscript che converte stringhe numeriche in numeri. – baacke

0

In alcuni casi il + genera un'eccezione; ad esempio il seguente:

Sub SimpleObject_FloatPropertyChanging(fvalue, cancel) 
    'fvalue is a floating point number 
    MsgBox "Received Event: " + fvalue 
End Sub 

Si otterrà un'eccezione quando la fonte oggetto COM genera l'evento - che si deve fare una delle seguenti operazioni:

MsgBox "Received Event: " & fvalue 

o

MsgBox "Received Event: " + CStr(fvalue) 

E ' potrebbe essere meglio in entrambi i casi usare CStr(value); ma usare & per i commenti precedenti per la concatenazione di stringhe è quasi sempre la migliore pratica.

Problemi correlati