[C#.NET] 使用 checked 防止資料溢位
我們很常在程式碼裡編寫值的總和,若沒有注意到溢位的問題,就會得到錯誤的結果,假設我們現在要算總營業額,如下範例
total++;
Console.WriteLine(string.Format("Total: {0}", total));
total++;
Console.WriteLine(string.Format("Total: {0}", total));
結果如下:
第二次的加總後變成 0 了,這是一個很嚴重的錯誤,我們應該要小心這樣的狀況出現。
下圖截取自MSDN
這時就應該使用 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));
若發生溢位便會拋出例外。
或是使用專案屬性,來幫我們設定編譯器屬性。
若不需要溢位檢查 則使用 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