Betrachten Sie diesen C#-Code:
byte x = 1;
byte y = 2;
byte z = x + y; // ERROR: Cannot implicitly convert type 'int' to 'byte'
Das Ergebnis der Berechnungen, die an byte
(oder short
) wird implizit in eine Ganzzahl zurückgewandelt. Die Lösung besteht darin, das Ergebnis explizit in ein Byte zurückzuwandeln:
byte z = (byte)(x + y); // this works
Ich frage mich nur, warum? Ist es architektonisch? Philosophisch?
Wir haben:
int
+int
=int
long
+long
=long
float
+float
=float
double
+double
=double
Warum also nicht?
byte
+byte
=byte
short
+short
=short
?
Ein wenig Hintergrundinformationen: Ich führe eine lange Liste von Berechnungen mit "kleinen Zahlen" (d.h. < 8) durch und speichere die Zwischenergebnisse in einem großen Array. Mit einer Byte-Array (anstelle eines int-Arrays) ist schneller (wegen der Cache-Treffer). Aber die umfangreichen Byte-Casts, die über den Code verteilt sind, machen ihn noch viel unleserlicher.