2013-08-20 6 views
8

Sto cercando di nascondere un codice VB.NET in C# e ho trovato questa cosa interessante. L'aggiunta di due caratteri restituisce risultati diversi in VB.NET e C#.In C# perché (char) (1) + (char) (2) risulta in int 3

VB.NET-ritorna stringa

Chr(1) & Chr(2) = " " 

C# - Restituisce int

(char)(1) + char(2) = 3 

Come si aggiunge (concatenare) due caratteri in C#?

+0

Intendi concatenare? – Paparazzi

+0

correggimi se ho torto - C# e java char e int arr della stessa dimensione e 0001 + 0010 = 0011 (3). –

+0

@Blam - sì Concatena – SarkarG

risposta

15

In C# char is a 16-bit numeric type, quindi + significa aggiunta, non concatenazione. Pertanto, quando aggiungi a e b ottieni a+b. Inoltre, il risultato di questa aggiunta è un int (see a quick demo).

Se con "aggiunta di due caratteri" si intende "concatenazione", convertirli in stringhe prima di applicare l'operatore + sarebbe una opzione. Un'altra opzione sarebbe utilizzando string.Format, in questo modo:

string res = string.Format("{0}{1}", charA, charB); 
+0

+1 Tristemente hai saltato la parte più interessante ... Perché in C# molte operazioni upcast a int :-) – xanatos

+0

Bene, devi ancora rispondere alla domanda: P –

+0

Ahaa ... Ora ho capito. Provato tutte le risposte menzionate qui e 'stringa.Formato 'sembra essere il modo più accurato per farlo. Anche la risposta di xanatos e Corak è buona, ma potrebbe confondere la squadra in futuro. – SarkarG

6

Con l'aggiunta di una stringa vuota è possibile forzare la "conversione" di char per string ... Così

string res = "" + (char)65 + (char)66; // AB 

(tecnicamente esso isn' Il compilatore sa che quando si aggiunge a un string deve fare un po 'di magia ... Se si prova ad aggiungere null a una stringa, si considera lo null una stringa vuota, se si prova ad aggiungere un string esso fa a string.Concat e i f si tenta di aggiungere qualsiasi altra cosa si fa un .ToString() sul membro non stringa e poi string.Concat)

0

(char) (1) ha un valore ASCII pari a 1 e (char) (2) valore ASCII 2

quindi valore ASCII di 1 + 2 (cioè (char) 1 + (char) 2) sarà uguale a 3.

se si: "2" + "1" questo vi darà "21" (anche se non dovreste usare questo per unire le stringhe, cattiva pratica)

se lo fai: '2' + '1' questo ti darà un valore int di 99 che è un valore di ascii di 2 (che è 50) + valore di ascii di 1 (che è 49).

+0

Perché è una cattiva pratica? – Arijoon

0

La risposta migliore è nei commenti quindi voglio elevarla qui a una risposta adeguata. Con credito completo a @Jeow Li Huan:

string res = string.Concat(charA, charB);