有没有办法对整个程序或整个块使用 unchecked ?
我正在从 java 翻译一些类型为 long 的东西,并且与无符号长常量进行大量比较...有些地方有一些开关有 20~30 个案例...我是否必须单独取消选中每个案例或者是否有有更快/更简单的方法吗?
case 101:
return jjMoveStringLiteralDfa5_0(active0, 0x8002010000000000L, active1, 0x1L);
我必须更改为:
return jjMoveStringLiteralDfa5_0(active0, unchecked((long)0x8002010000000000L), active1, 0x1L);
但有很多情况......并且它位于具有大量 IF 的解析器生成器中,因此最好有一些东西来抑制整个文件中的这些检查,而不是搜索会生成这些无符号长常量的每个可能的位置。 ..
有一种方法可以在 Visual Studio 选项上设置它,但由于我正在生成一个解析器,我想知道是否可以使该解析器自动不检查溢出/下溢,这可能吗?
如果你想用十六进制字面量来表达negative通过二进制补码约定的整数,您只需have提供强制转换和显式使用unchecked
关键词。例子:
sbyte b = unchecked((sbyte)0xAB);
short s = unchecked((short)0xABCD);
int i = unchecked((int)0xABCDABCD);
long l = unchecked((long)0xABCDABCDABCDABCD);
默认上下文(由 C# 编译器开关和/或定义)是不够的csproj
file) 是“未经检查”的上下文。
如果您可以使用无符号类型(例如uint
),你就不会遇到这个问题。但 BCL 通常不使用无符号类型,并且不被视为“符合 CLS”。
只要说清楚,positive文字你既不需要强制转换也不需要unchecked
关键词:
sbyte b = 0x2E;
short s = 0x2E3F;
int i = 0x2E3F2E3F;
long l = 0x2E3F2E3F2E3F2E3F;
对于常量表达式,隐式转换的存在可以使这变得简单,请参阅隐式常量表达式转换 http://msdn.microsoft.com/en-us/library/aa691286.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)