Ich habe den folgenden C# -Code:C# numerische Konstanten
byte rule = 0;
...
rule = rule | 0x80;
, die die Fehler produziert:
Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)
[Update: erste Version der Frage falsch war ... ich die Compiler Ausgabe falsch gelesen ]
die Besetzung Hinzufügen nicht beheben nicht das Problem:
rule = rule | (byte) 0x80;
muss ich es so schreiben:
rule |= 0x80;
Welche einfach seltsam scheint. Warum unterscheidet sich der Operator |=
von dem Operator |
?
Gibt es eine andere Möglichkeit, dem Compiler mitzuteilen, dass die Konstante als Byte behandelt werden soll?
@ Giovanni Galbo: ja und nein. Der Code behandelt die Programmierung des Flash-Speichers in einem externen Gerät und stellt logisch ein einzelnes Speicherbyte dar. Ich könnte es später werfen, aber das schien mehr offensichtlich. Ich denke, mein C-Erbe zeigt zu viel!
@ Jonathon Holland: die ‚als‘ Syntax ordentlicheres aussieht, aber leider scheint nicht zu funktionieren ... es produziert:
The as operator must be used with a reference type or nullable type ('byte' is a non-nullable value type)
Wie Sie sagen, sind alle Eingänge int32, gibt die Sprach- (oder CLR-) Spezifikation diese Garantie nicht? – Eloff
int ist ein C# -Alias für Int32 und ist definitiv nicht das gleiche wie ein Byte. Der JIT-Compiler ist plattformunabhängig, also müssen wir es nicht sein. Die native Wortgröße, die Adressierung und die Effizienz von Operationen gegen verschiedene native Primitive sind wahrscheinlicher daran beteiligt, wie verwaltete Daten (einschließlich "Primitiven") im zugrunde liegenden System zugewiesen werden.Bedenken Sie, dass derselbe Code sowohl für .NET Micro als auch für .NET CF (für ARM für Telefon und PowerPC für XBox 360) kompiliert werden kann. Diese Systeme können sogar ihre Zahlen mit unterschiedlicher Endianz ausdrücken, was große Auswirkungen auf binäre Operationen hat. – TheXenocide