C#基礎之checked與 unchecked的使用

陳大寶發表於2021-06-13

C#基礎之checked與 unchecked的使用

以上都是C#中的兩個關鍵字的使用、據官網給出的相關介紹是:C# 語句既可以在已檢查的上下文中執行,也可以在未檢查的上下文中執行。

已檢查的上下文中,演算法溢位引發異常。 在未選中的上下文中忽略算術溢位並將結果截斷,方法是:丟棄任何不適應目標型別的高序位。

  • checked 指定已檢查的上下文。

  • unchecked 指定未檢查的上下文。

1、checked

checked 關鍵字用於對整型型別算術運算和轉換顯式啟用溢位檢查。預設情況下,如果表示式僅包含常量值,且產生的值在目標型別範圍之外,則會導致編譯器錯誤。 如果表示式包含一個或多個非常量值,則編譯器不檢測溢位。 在下面的示例中,計算賦給 i2 的表示式不會導致編譯器錯誤。int型別最大值為:2147483647

1 {
2     int ten = 10;
3     int i2 = 2147483647 + ten;
4     Console.WriteLine(i2);
5 }

控制檯輸出:

   預設情況下,在執行時也不檢查這些非常量表示式是否溢位,這些表示式不引發溢位異常。 上面的示例顯示 -2,147,483,639 作為兩個正整數之和。

以上表示式包含一個或多個非常量值,則編譯器不檢測溢位、如果表示式僅包含常量值,且產生的值在目標型別範圍之外,則會導致編譯器錯誤?答案是會的

1  {
2      //如果表示式僅包含常量值
3      int i2 = 2147483647 + 10;
4      Console.WriteLine(i2);
5  }

 以上結果直接編譯不通過。原因是由於編輯器預設情況下啟用checked模式、並且僅包含常量值、不包括變數情況下、編輯器會自動幫我們判斷、

那麼對於第一種情況包含變數時、我們需要使用checked關鍵字判斷是否運算溢位?程式碼如下

 1 checked
 2 {
 3     int ten = 10;
 4     try
 5     {
 6         int i3 = 2147483647 + ten;
 7     }
 8     catch(Exception ex)
 9     {
10         Console.WriteLine(ex.Message);
11     }
12  
13 }

控制檯輸出:

 以上就是checked關鍵字使用、啟用是否溢位檢查、那想要取消溢位檢查呢?使用unchecked可以避開檢查

2、unchecked

unchecked 關鍵字用於取消整型型別的算術運算和轉換的溢位檢查。

1  unchecked
2  {
3      int i2 = 2147483647 + 10;
4      Console.WriteLine(i2);
5  }

控制檯輸出:

  如果刪除 unchecked 環境,會發生編譯錯誤。 由於表示式的所有項都是常量,因此可在編譯時檢測到溢位。以上就是checked與uncheck的相關使用

 

 

 

 

 

 

 

 

相關文章