2013-08-20 12 views
8

Ich versuche, einige VB.NET-Code zu C# zu verdecken und fand diese interessante Sache. Das Hinzufügen von zwei Zeichen gibt unterschiedliche Ergebnisse in VB.NET und C# zurück.In C# warum (char) (1) + (char) (2) ergibt int 3

VB.NET-kehrt String

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

C#-gibt int zurück

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

Wie kann ich (verketten) zwei Zeichen in C# hinzufügen?

+0

Sie meinen verketten? – Paparazzi

+0

korrigieren Sie mich, wenn ich falsch bin - C# und Java char und Int arr der gleichen Größe und 0001 + 0010 = 0011 (3). –

+0

@Blam - ja Verketten – SarkarG

Antwort

15

In C# char is a 16-bit numeric type, also + bedeutet Addition, nicht Verkettung. Wenn Sie also a und b hinzufügen, erhalten Sie . Darüber hinaus ist das Ergebnis dieser Zugabe ein int (see a quick demo).

Wenn Sie "zwei Zeichen hinzufügen" meinen, dass "Verkettung", konvertieren sie in eine Zeichenfolgen vor der Anwendung von Operator + wäre eine Option. Eine weitere Option wäre mit string.Format, wie folgt aus:

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

+1 Leider haben Sie den interessantesten Teil übersprungen ... Warum in C# viele Operationen upcast bis int :-) – xanatos

+0

Nun, Sie müssen immer noch die Frage beantworten: P –

+0

Ahaa ... Jetzt habe ich es. Versuchte alle Antworten, die hier erwähnt werden, und "string.Format" scheint der beste Weg dafür zu sein. Auch die Antwort von Xanatos und Corak ist gut, aber es könnte das Team in Zukunft verwirren. – SarkarG

6

Durch das Hinzufügen zu einer leeren Zeichenfolge Sie die "Umwandlung" von char zu string zwingen kann ... So

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

(technisch es isn‘ t eine Umwandlung.Der Compiler weiß, dass, wenn Sie zu einem string hinzufügen, es etwas mag ... Wenn Sie versuchen, null zu einer Zeichenfolge hinzuzufügen, betrachten Sie die null als eine leere Zeichenfolge, wenn Sie versuchen, eine string es tut a string.Concat und ich f versuchen Sie etwas hinzuzufügen anderes es macht ein .ToString() auf dem Nicht-String-Mitgliedes und dann string.Concat)

0

(char) (1) einen ASCII-Wert von 1 und (char) (2) ascii-Wert von 2

so Ascii Wert von 1 + 2 (dh (char) 1 + (char) 2) ist gleich 3.

Wenn Sie tun: "2" + "1" das wird Ihnen "21" geben (auch sollten Sie dies nicht verwenden, um Strings zu verbinden, schlechte Praxis)

Wenn Sie tun: '2' + '1' dies wird Ihnen Int-Wert von 99, die Ascii-Wert von 2 ist (was 50) + ASCII-Wert von 1 (49) ist.

+0

Warum ist es eine schlechte Übung? – Arijoon

0

Die beste Antwort ist in den Kommentaren, also möchte ich es hier zu einer richtigen Antwort erheben. Mit vollem Kredit gehen @Jeow Li Huan:

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