C# 中 Checked 語法的功能

在這個硬體成本不算高的年代,記憶體的使用通常都略微不那麼謹慎;往往在宣告數字型別時不會太謹慎(還是剛好我遇到的都…),例如只有short 需求卻宣告成 int 這種狀況屢見不鮮。

若要好好地控制記憶體使用量,避免溢位的需求就要特別注意,尤其這種狀況通常發生在執行期,log也可能也無法完整紀錄當時狀況,因此 Checked 語法就派上用場了。

1
2
3
4
short shortNumber = 32767;
Console.WriteLine($"Org short number: {shortNumber}");
shortNumber += 1;
Console.WriteLine($"Plus 1 to short number:{shortNumber}");

顯示結果如下:

1
2
Org short number: 32767
Plus 1 to short number:-32768

明明只有加1卻出現了意想不到的數字。為了避免這種情況發生,可以使用Checked語法來做檢查,至少如果有問題會先彈出exception。

1
Console.WriteLine($"Plus 1 to short number:{checked(shortNumber+=1)}");

結果是直接跳出exception並告知以下結果:

1
Unhandled Exception: System.OverflowException: Arithmetic operation resulted in an overflow.

當然我們也可以預先使用try catch來攔截相關的錯誤

1
2
3
4
5
6
7
8
9
10
11
short shortNumber = 32767;
Console.WriteLine($"Org short number: {shortNumber}");
try
{
Console.WriteLine($"Plus 1 to short number:{checked(shortNumber += 1)}");
}
catch (System.OverflowException e)
{
Console.WriteLine($"Found overflow exception. Msg:\n{e}");
}
Console.WriteLine($"Done");

結果就是毫無懸念的

1
2
3
4
5
Org short number: 32767
Found overflow exception. Msg:
System.OverflowException: Arithmetic operation resulted in an overflow.
at ConsoleAll.Program.Main(String[] args) in /Users/mingyi/Documents/vscode/Practice/ConsoleAll/ConsoleAll/Program.cs:line 13
Done

這語法雖然難度不高,但能夠在執行期多了一層保障,以及更快能夠查到問題的所在。

  • 作者: MingYi Chou
  • 版權聲明: 轉載不用問,但請註明出處!本網誌均採用 BY-NC-SA 許可協議。