我一直在用 C# 编写一个相当低级的应用程序,它使用大量字节短和位操作。我注意到的一件事是 C# 不喜欢进行位操作并在除 int 之外的任何东西上使用布尔运算符。这导致我的代码中有 100 次强制转换。诸如“无法将类型'int'隐式转换为'ushort'之类的错误。存在显式转换(您是否缺少强制转换?)”
byte b1 = 0x22;
byte b2 = 0x33;
ushort s1 = b1 << 8; // <-- Error Here
ushort s2 = s1 | b2; // <-- And Here
这迫使我在任何地方都使用演员表。
byte b1 = 0x22;
byte b2 = 0x33;
ushort s1 = (ushort)(b1 << 8 | b2);
这最多应该是一个警告。即使 b1 和 b2 是 ushort 类型,它仍然是一个错误。即使是加法之类的基本算术也会产生相同的错误。
ushort s1 = 0x22;
ushort s2 = s1 + 0x11; // <-- Oh Come On.
ushort s3 = 8;
ushort s4 = (s1 << s3 | s2); // <-- Still an Error.
无论如何,还是我只需要接受这样一个事实,即在使用除整数以外的任何东西时,强制转换只是 C# 生活的一部分,或者只是在这不是问题的情况下使用 C++。