.NET中字节的文字后缀?

Mat*_*ias 153 .net c# value-type

我想知道是否有任何方法可以像浮点数或双打一样以短的方式声明一个字节变量?我的意思是喜欢5f5d.当然我可以写byte x = 5,但如果你使用var局部变量,这有点无关紧要.

Mat*_*att 138

字节MSDN引用以及C#4.0语言规范中没有提到文字后缀.C#中唯一的文字后缀是整数和实数,如下所示:

u = uint
l = long
ul = ulong
f = float
m = decimal
d = double
Run Code Online (Sandbox Code Playgroud)

如果要使用var,可以始终将字节转换为var y = (byte) 5

虽然没有真正相关,但在C#7中,引入了一个新的二进制前缀0b,该前缀表示该数字是二进制格式.尽管如此,仍然没有后缀使它成为一个字节,例如:

var b = 0b1010_1011_1100_1101_1110_1111; //int
Run Code Online (Sandbox Code Playgroud)

  • `0b1010_1011_1100_1101_1110_1111`仍然是`Int32`. (18认同)
  • 您能否提供指向包含“0b”的 C# 7 文档的链接。 (2认同)

Ert*_*maa 27

因此,我们去年秋天在VB中添加了二进制文字,并得到了早期测试人员的类似反馈.我们决定为VB添加字节后缀.我们选择了SB(用于有符号字节)和UB(用于无符号字节).它不仅仅是B和SB的原因是双重的.

一,B后缀是不明确的,如果你用十六进制写(0xFFB是什么意思?),即使我们有一个解决方案,或者另一个字符而不是'B'(考虑'Y',F#使用它)no我们可以记住默认值是有符号还是无符号 - 默认情况下.NET字节是无符号的,因此选择B和SB是有意义的,但是所有其他后缀都是默认签名的,因此它与其他类型的后缀一致,以便选择B和UB.最后,我们选择了明确的SB和UB. - Anthony D. Green,

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

显然,似乎他们已经在VB.NET中完成了这一步骤(可能现在不会发布),他们可能会在Roslyn中为C#实现它 - 如果你认为这是你想要的东西,那就去投票吧.您还有机会提出可能的语法.

  • 而且似乎仍未在VS 2017中实现。 (3认同)
  • VS 2019 中也没有。根据上面引用的 MSDN 页面(更新于 01/30/2018):_Boolean、Byte、Char、Date、Object、SByte、Short、UInteger、ULong 或 UShort 数据类型不存在标识符类型字符,或任何复合数据类型,例如数组或结构。_ (3认同)
  • @Pona 不过,“UL”后缀适用于“ulong”(“UInt64”)。 (2认同)

Dan*_*zey 10

这个 MSDN页面,似乎你唯一的选择是显式转换(var x = (byte)5),或停止使用var...

  • 这不仅仅是关于`var`.例如,`this.pixels [x,y] =条件?(字节)0 :(字节)1;` (8认同)
  • @JohnGietzen,正是!就我而言,它是`Math.Max(myByte, (byte)1)`。顺便说一句,你可以将你的例子替换为:`this.pixels[x, y] = (byte)(condition ? 0 : 1);`,在我看来更好看,或者`this.pixels[x, y] ] = Convert.ToByte(!condition);` (2认同)

Adr*_*man 5

根据MSDN,您可以使用十进制、十六进制或二进制文字声明一个字节。

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// binary literal
byte x = 0b0000_0101;
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是 `byte x; x = 谓词?0x05 : 0x00;` 是一个错误,因为三元运算符的结果是一个 int。 (12认同)
  • 这并不能回答问题。问题不是关于如何初始化一个字节,而是关于如何明确地说“这是一个字节”。对于“var x = 5”,x 是一个 int,对于“var x = 5d”,x 是一个 double。当使用数字作为属性中的参数时,这一点变得很重要:具有 double 的构造函数可以执行与 int 构造函数不同的操作。(可能不应该,但可以)。通过你的答案,你只展示了初始化“x”的不同可能性。 (3认同)