Ich frage mich, ob es eine Möglichkeit gibt, eine Byte-Variable auf kurze Weise wie Floats oder Doubles zu deklarieren. Ich meine wie 5f
und 5d
. Sicher könnte ich schreiben byte x = 5
, aber das ist ein bisschen belanglos, wenn Sie var
für lokale Variablen verwenden.
c#
.net
value-type
Matthias
quelle
quelle
var
der einzige Anwendungsfall ist. Es gibt andere gültige Anwendungsfälle. Zum Beispielbyte value = condition ? (byte)5 : (byte)6
.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
definieren gehenbyte ub5 = 5, ub6 = 6;
. hehebyte value = condition ? 5 : 6;
?Antworten:
In der MSDN-Referenz für Byte sowie in der C # 4.0-Sprachspezifikation wird kein Literal-Suffix erwähnt . Die einzigen Literal-Suffixe in C # sind für ganzzahlige und reelle Zahlen wie folgt:
Wenn Sie verwenden möchten
var
, können Sie das Byte jederzeit wie in umwandelnvar y = (byte) 5
Obwohl nicht wirklich verwandt, wurde in C # 7 ein neues binäres Präfix eingeführt
0b
, das besagt, dass die Zahl im binären Format vorliegt. Es gibt jedoch kein Suffix, um es zu einem Byte zu machen. Beispiel:quelle
0b1010_1011_1100_1101_1110_1111
ist immer noch einInt32
obwohl.0b
es behandelt wird?https://roslyn.codeplex.com/discussions/542111
Anscheinend haben sie diesen Schritt in VB.NET gemacht (möglicherweise noch nicht veröffentlicht) und ihn möglicherweise in Roslyn für C # implementiert. Geben Sie Ihre Stimme ab, wenn Sie der Meinung sind, dass dies etwas ist, das Sie möchten. Sie hätten auch die Möglichkeit, eine mögliche Syntax vorzuschlagen.
quelle
Auf dieser MSDN-Seite scheint es, dass Ihre einzigen Optionen darin bestehen, explizit (
var x = (byte)5
) zu konvertieren oder die Verwendung vonvar
...quelle
var
. Zum Beispielthis.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. Und übrigens, Sie können Ihr Beispiel ersetzen durchthis.pixels[x, y] = (byte)(condition ? 0 : 1);
this.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
würde viel besser aussehen als[InlineData((byte)1)]
(mit using1
könnte nur eine Ausnahme ausgelöst werden, wenn der Parameter ein nullbares Byte ist und Sie ihm ein int geben)Wie pro MSDN können Sie ein Byte mit einem dezimal, hexadezimal oder binär wörtlichen deklarieren.
quelle
byte x; x = predicate ? 0x05 : 0x00;
ist ein Fehler, da das Ergebnis des ternären Operators ein int ist.var x = 5
, x ist ein int, mitvar x = 5d
, x ist ein double. Wenn Sie die Zahl als Parameter in einem Attribut verwenden, wird dies wichtig: Ein Konstruktor mit double kann etwas anderes als einen Konstruktor mit int tun. (Es sollte nicht, aber es könnte). Mit Ihrer Antwort zeigen Sie nur die verschiedenen Möglichkeiten, dies zu initialisierenx
.