C#基礎之checked與 unchecked的使用
以上都是C#中的兩個關鍵字的使用、據官網給出的相關介紹是:C# 語句既可以在已檢查的上下文中執行,也可以在未檢查的上下文中執行。
在已檢查的上下文中,演算法溢位引發異常。 在未選中的上下文中忽略算術溢位並將結果截斷,方法是:丟棄任何不適應目標型別的高序位。
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的相關使用