web-dev-qa-db-ja.com

.NETのバイトのリテラルサフィックス?

Floatまたはdoubleのような短い方法でバイト変数を宣言する方法があるのだろうか? 5fおよび5d。確かにbyte x = 5が、ローカル変数にvarを使用する場合、それは少し重要ではありません。

151
Matthias

ByteのMSDNリファレンス および C#4.0言語仕様 には、リテラルサフィックスについての言及はありません。 C#のリテラル接尾辞は、整数と実数の場合のみ次のとおりです。

_u = uint
l = long
ul = ulong
f = float
m = decimal
d = double
_

varを使用する場合は、var y = (byte) 5のように常にバイトをキャストできます。

実際には関連していませんが、C#7では、新しいバイナリプレフィックスが_0b_で導入されました。これは、数値がバイナリ形式であることを示しています。それでも、バイトにするための接尾辞はありません、例:

_var b = 0b1010_1011_1100_1101_1110_1111; //int
_
134
Matt

そこで、昨年秋にVB=にバイナリリテラルを追加し、初期テスターから同様のフィードバックを得ました。VBのバイトにサフィックスを追加することにしました。SB(符号付きバイト用)およびUB (符号なしバイトの場合)BとSBだけではない理由は2つあります。

1つ目は、16進数(0xFFBとはどういう意味ですか)で記述している場合や、その解決策、または 'B'以外の文字( 'Y'が考慮され、F#がこれを使用します)である場合、Bサフィックスはあいまいですデフォルトが符号付きか符号なしかを思い出すことができます-.NETバイトはデフォルトで符号なしですので、BとSBを選択するのは理にかなっていますが、他のすべてのサフィックスはデフォルトで署名されるため、Bを選択する他のタイプのサフィックスと一致しますUB。最後に、明確なSBとUBを選びました。 -アンソニーD.グリーン、

https://roslyn.codeplex.com/discussions/542111

どうやら、彼らはVB.NETでこの動きをしたようです(今すぐリリースされないかもしれません)、そして彼らはそれをC#のroslynに実装するかもしれません-あなたがそれがあなたが望むものであると思うなら、あなたの投票をしてください。また、可能な構文を提案する機会があります。

25

this MSDNページから、あなたの唯一のオプションは、明示的にキャストする(var x = (byte)5)か、var...の使用をやめることです。

10
Dan Puzey

[〜#〜] msdn [〜#〜] に従って、10進、16進、または2進リテラルを使用してバイトを宣言できます。

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// binary literal
byte x = 0b0000_0101;
3
Adrian Toman