gpt4 book ai didi

c# - 如何在c#中使用多个uncheckeds

转载 作者:行者123 更新时间:2023-11-30 22:05:38 24 4
gpt4 key购买 nike

有没有办法对整个程序或整个 block 使用 unchecked ?

我正在翻译 java 中的一些东西,它的类型是 long 并且与 unsigned long 常量进行了大量比较......有些地方有一些开关有 20~30 个案例......我是否必须单独取消选中每个案例还是有更快/更简单的方法?

case 101: 
return jjMoveStringLiteralDfa5_0(active0, 0x8002010000000000L, active1, 0x1L);

我必须更改为:

   return jjMoveStringLiteralDfa5_0(active0, unchecked((long)0x8002010000000000L), active1, 0x1L);

但是有很多情况……它在一个带有很多 IF 的解析器生成器中,所以最好有一些东西来抑制整个文件中的这些检查,而不是搜索每个可能生成那些未签名的地方长常量...

有一种方法可以在 Visual Studio 选项上进行设置,但由于我正在生成一个解析器,我想知道我是否可以让该解析器自动不检查溢出/下溢,这可能吗?

最佳答案

如果您想通过二进制补码约定使用十六进制文字来表示整数,您只需拥有提供强制转换和显式使用 unchecked 关键字。示例:

sbyte b = unchecked((sbyte)0xAB);
short s = unchecked((short)0xABCD);
int i = unchecked((int)0xABCDABCD);
long l = unchecked((long)0xABCDABCDABCDABCD);

默认上下文(由 C# 编译器开关和/或 csproj 文件定义)是“未检查”上下文是不够的。

如果您可以使用无符号类型(例如 uint),您就不会遇到这个问题。但无符号类型通常不被 BCL 使用,并且不被视为“符合 CLS”。


只需完全清楚,使用positive 文字,您既不需要强制转换也不需要 unchecked 关键字:

sbyte b = 0x2E;
short s = 0x2E3F;
int i = 0x2E3F2E3F;
long l = 0x2E3F2E3F2E3F2E3F;

对于常量表达式,存在隐式转换以简化此操作,请参阅 Implicit constant expression conversions .

关于c# - 如何在c#中使用多个uncheckeds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24252881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com