如何将1添加到一个字节

Ada*_*ght 5 .net nemerle

我试过了

 module Program
 {
  Main() : void
  { mutable x : byte = 0B;
    mutable y : byte = 0B;  
    x++;
    //y = x + 1;
    //y = x + 1B;
    //def one:byte=1;//   x = x + one;
  }
 }
Run Code Online (Sandbox Code Playgroud)

无论我尝试哪一个,我都会收到以下错误消息.

错误1期望字节,在赋值中得到int:System.Int32不是System.Byte的子类型[simple require]

我发现作品的唯一方法就是

    y = ( x + 1 ):>byte
Run Code Online (Sandbox Code Playgroud)

哪个有点faff,只是添加一个.

为什么是这样?还有更好的(阅读更短的方式)?

Don*_*eba 8

和在C#中一样,Nemerle 中a byte和a 之和的结果byteint.但是,与C#不同,Nemerle试图尽可能地保持核心语言的紧凑性,将所有语法糖保留在标准宏库中.在这种精神中,+=++运算符是宏,这些宏被转换为常规添加.

要回答你的问题,(x + 1) :> byte就是这样做的方法.它实际上并非全是坏事,因为它让您的代码读者知道您意识到溢出的危险并对其负责.

尽管如此,如果您对它有强烈的感觉,您可以轻松编写自己的宏+=++宏来执行演员表.它只需要几行代码.


svi*_*ick 1

免责声明:我不了解 Nemerle,但我假设它在这方面的行为与 C# 类似。

有一个更好、更短的方法:不使用字节。

你为什么首先使用它们?大多数时候,使用ints 进行计算比使用 s 更快byte,因为当今的计算机已针对它们进行了优化。