Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中使用多个未选中项#_C#_Unchecked - Fatal编程技术网

C# 如何在c中使用多个未选中项#

C# 如何在c中使用多个未选中项#,c#,unchecked,C#,Unchecked,有没有一种方法可以对整个程序或整个块使用unchecked 我正在翻译一些来自java的东西,它的类型是long,并且与无符号long的常量进行了大量比较。。。有些地方有一个开关有20~30个箱子。。。我是否必须逐个取消选中每个案例,或者是否有更快/更简单的方法 case 101: return jjMoveStringLiteralDfa5_0(active0, 0x8002010000000000L, active1, 0x1L); 我必须换成: return jjMoveS

有没有一种方法可以对整个程序或整个块使用unchecked

我正在翻译一些来自java的东西,它的类型是long,并且与无符号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”


只需将其完全弄清楚,使用文本,您既不需要强制转换,也不需要取消选中
关键字:

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

对于常量表达式,存在隐式转换以简化此操作,请参见。

您的意思是像
未选中的{//code here}
什么不起作用?你没有提供任何代码。当你在翻译的时候,你可能会考虑修复核心问题……“但是它似乎不起作用”不是真正的回答。它是编译器的开关,但是有没有办法让我把它隐出来,这样我就不必一直在铸造?比如:“无论何时需要将ulong转换为long,都要这样做(my_conversion)”@nightshade您必须调用自己的方法,这可能是一个扩展方法。编辑:转换将不再在编译时进行;这将是一个运行时的东西(但可能是“空的”性能冲击)。。。我想我只需点击CTRL+F,在生成代码的部分中找到所有的“0x”字符串,然后在前面加上(long)或(int),然后。。。