C# 如何在c中使用多个未选中项#
有没有一种方法可以对整个程序或整个块使用unchecked 我正在翻译一些来自java的东西,它的类型是long,并且与无符号long的常量进行了大量比较。。。有些地方有一个开关有20~30个箱子。。。我是否必须逐个取消选中每个案例,或者是否有更快/更简单的方法C# 如何在c中使用多个未选中项#,c#,unchecked,C#,Unchecked,有没有一种方法可以对整个程序或整个块使用unchecked 我正在翻译一些来自java的东西,它的类型是long,并且与无符号long的常量进行了大量比较。。。有些地方有一个开关有20~30个箱子。。。我是否必须逐个取消选中每个案例,或者是否有更快/更简单的方法 case 101: return jjMoveStringLiteralDfa5_0(active0, 0x8002010000000000L, active1, 0x1L); 我必须换成: return jjMoveS
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”
只需将其完全弄清楚,使用正文本,您既不需要强制转换,也不需要取消选中
关键字:
sbyte b = 0x2E;
short s = 0x2E3F;
int i = 0x2E3F2E3F;
long l = 0x2E3F2E3F2E3F2E3F;
对于常量表达式,存在隐式转换以简化此操作,请参见。您的意思是像未选中的{//code here}
什么不起作用?你没有提供任何代码。当你在翻译的时候,你可能会考虑修复核心问题……“但是它似乎不起作用”不是真正的回答。它是编译器的开关,但是有没有办法让我把它隐出来,这样我就不必一直在铸造?比如:“无论何时需要将ulong转换为long,都要这样做(my_conversion)”@nightshade您必须调用自己的方法,这可能是一个扩展方法。编辑:转换将不再在编译时进行;这将是一个运行时的东西(但可能是“空的”性能冲击)。。。我想我只需点击CTRL+F,在生成代码的部分中找到所有的“0x”字符串,然后在前面加上(long)或(int),然后。。。