[C#.NET] 使用 checked 防止資料溢位

  • 6094
  • 0
  • C#
  • 2013-05-08

[C#.NET] 使用 checked 防止資料溢位

我們很常在程式碼裡編寫值的總和,若沒有注意到溢位的問題,就會得到錯誤的結果,假設我們現在要算總營業額,如下範例


total++;
Console.WriteLine(string.Format("Total: {0}", total));
total++;
Console.WriteLine(string.Format("Total: {0}", total));

結果如下:

image

第二次的加總後變成 0 了,這是一個很嚴重的錯誤,我們應該要小心這樣的狀況出現。

下圖截取自MSDN

image

這時就應該使用 checked expression 或 checked block

checked block:


{
    uint total = 4294967294;
    total++;
    Console.WriteLine(string.Format("Total: {0}", total));
    total++;
    Console.WriteLine(string.Format("Total: {0}", total)); 
}

checked expression:


total = checked(total + 1);
Console.WriteLine(string.Format("Total: {0}", total));
total = checked(total + 1);
Console.WriteLine(string.Format("Total: {0}", total));

若發生溢位便會拋出例外。

image

或是使用專案屬性,來幫我們設定編譯器屬性。

image

image

若不需要溢位檢查 則使用 unchecked

參考來源:

http://msdn.microsoft.com/zh-tw/library/74b4xzyw.aspx

http://msdn.microsoft.com/zh-tw/library/khy08726.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo