Frage In c # warum (char) (1) + (char) (2) ergibt int 3


Ich versuche, etwas VB.NET-Code zu C # zu verdecken und fand dieses interessante Ding. Das Hinzufügen von zwei Zeichen gibt unterschiedliche Ergebnisse in VB.NET und C # zurück.

VB.NET - gibt String zurück

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

C # - gibt int zurück

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

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


8
2017-08-20 12:48


Ursprung


Antworten:


In C # char ist ein numerischer 16-Bit-Typ, damit + bedeutet Addition, keine Verkettung. Daher, wenn Sie hinzufügen a und b du erhältst a+b. Außerdem ist das Ergebnis dieser Addition ein int (Sehen Sie eine kurze Demo).

Wenn Sie "zwei Zeichen hinzufügen" meinen, meinen Sie "Verkettung", indem Sie sie in Zeichenfolgen konvertieren, bevor Sie den Operator anwenden + wäre eine Option. Eine andere Option wäre die Verwendung string.Format, so was:

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

15
2017-08-20 12:52



Durch Hinzufügen zu einer leeren Zeichenfolge können Sie die "Umwandlung" von erzwingen char zu string... Damit

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

(technisch ist es keine Umwandlung. Der Compiler weiß, dass wenn Sie zu einem hinzufügen string es muss etwas Magie tun ... Wenn Sie versuchen, hinzuzufügen null zu einer Zeichenkette, es betrachten die null eine leere Zeichenfolge sein, wenn Sie versuchen, ein string es tut a string.Concat und wenn Sie versuchen, etwas anderes hinzuzufügen, tut es a .ToString() auf dem Nicht-String-Mitglied und dann string.Concat)


6
2017-08-20 12:58



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

so wird ein ASCII-Wert von 1 + 2 (d. h. (char) 1 + (char) 2) gleich 3 sein.

wenn Sie tun: "2" + "1" das wird dir "21" geben (du solltest das nicht benutzen, um Strings beizutreten, schlechte Übung)

wenn Sie tun: '2' + '1' Dies ergibt einen int-Wert von 99, dh ein ascii-Wert von 2 (was 50 ist) + ascii-Wert von 1 (was 49 ist).


0
2017-08-20 13:01



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

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

0
2017-07-24 17:45