C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# checked unchecked

C# checked和unchecked的使用小结

作者:鲤籽鲲

C#中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();
        }

四、本地函数与 Checked

具体使用见下面案例:

      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;
        }
    }

注意,在前面的示例中:

      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# 参考)

到此这篇关于C# checked和unchecked的使用小结的文章就介绍到这了,更多相关C# checked unchecked 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文