考慮這種靜態的測試類:爲什麼C#在嘗試對int以外的整數類型進行數學運算時拋出轉換錯誤?
public static class Test
{
public static ushort sum(ushort value1, ushort value2)
{
return value1 + value2
}
}
這將導致以下編譯錯誤,與value1 + value2
紅色下劃線:
無法隱式轉換類型「詮釋」 爲「USHORT」。存在明確的轉換 (您是否缺少演員表)?
爲什麼?
編譯器要求您清楚表明您正在進行縮小轉換,其中數據可能會丟失。如果你通過ushort.MaxValue和1,會發生什麼?這是編譯器提醒你回答的問題。 – 2010-07-21 18:04:01
@Dan:應該發生什麼是'ushort'應該自動溢出,或者在正在使用'checked'關鍵字時拋出溢出異常。如果添加兩個「int」值,即使可能發生溢出,也不會得到相同的編譯器錯誤。 – 2010-07-21 18:56:22
我的看法:溢出是由於操作而發生的事情,而不是分配。尤其是,即使最終結果在範圍內,您也可以在複雜計算中溢出。如果發生溢出,數學運算無法按預期運行,但在32位系統上添加兩個ushort時不會發生這種情況。數學運作良好,但你現在必須決定如何解釋結果。如果你想讓它溢出,那麼你可以明確地將它轉換爲ushort。這可能會隱式發生,但要求進行明確的轉換會很有幫助。 – 2010-07-21 19:38:46