36人参与 • 2025-07-31 • Asp.net
checked 和 unchecked 语句指定整型类型算术运算和转换的溢出检查上下文。
当发生整数算术溢出时,溢出检查上下文将定义发生的情况。
checked
和 unchecked
语句指定整型类型算术运算和转换的溢出检查上下文。具体使用见下面案例:
static void main(string[] args) { uint a = uint.maxvalue; //【一】检查代码段 unchecked{ } unchecked { console.writeline(a + 1); // output: 0 } try { checked { console.writeline(a + 1); } } catch (overflowexception e) { console.writeline(e.message); // output: 算术运算导致溢出。 } //由上可知,当我们使用checked的时候会做溢出检查,会抛出异常 // 当我们使用unchecked的时候不会做溢出检查,不会有异常
具体使用见下面案例:
//【二】检查表达式 unchecked() double d = double.maxvalue; int i = unchecked((int)d); console.writeline(i); // output: -2147483648 try { i = checked((int)d); } catch (overflowexception e) { console.writeline(e.message); // output: 算术运算导致溢出。 } console.readline(); }
具体使用见下面案例:
static void main(string[] args) { int multiply(int a, int b) => a * b; int factor = 2; try { checked { console.writeline(multiply(factor, int.maxvalue)); // output: -2 } } catch (overflowexception e) { console.writeline(e.message); } try { checked { console.writeline(multiply(factor, factor * int.maxvalue)); } } catch (overflowexception e) { console.writeline(e.message); // output: arithmetic operation resulted in an overflow. } }
internal class program { static void main(string[] args) { int factor = 2; try { checked { console.writeline(multiply2(factor, int.maxvalue)); // output: -2 } } catch (overflowexception e) { console.writeline(e.message); } try { checked { console.writeline(multiply2(factor, factor * int.maxvalue)); } } catch (overflowexception e) { console.writeline(e.message); // output: arithmetic operation resulted in an overflow. } } private static int multiply2(int a, int b) { return a * b; } }
注意,在前面的示例中:
multiply
,一个正常的私有函数multiply2
console.writeline(multiply2(factor, int.maxvalue));
这样的方式调用 本地函数multiply
或私有函数multiply2
,checked 语句不会引发任何异常。console.writeline(multiply2(factor, factor * int.maxvalue));
这样的方式调用 本地函数multiply
或私有函数multiply2
,由于第二个参数 的表达式 会引起 checked 语句的上下文检查,因此会引发异常。static void main(string[] args) { int multiply(int a, int b) => a * b; int factor = 2; try { unchecked { console.writeline(multiply(factor, int.maxvalue)); // output: -2 } } catch (overflowexception e) { console.writeline(e.message); } try { unchecked { console.writeline(multiply(factor, factor * int.maxvalue)); // output: -4 } } catch (overflowexception e) { console.writeline(e.message); } }
到此这篇关于c# checked和unchecked的使用小结的文章就介绍到这了,更多相关c# checked unchecked 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论