首頁 培訓計劃 培訓課程 企業內訓 學員論壇 技術文章 成功案例 師資簡介 關于我們 在線留言  
.NET開發資料
讓C#中的0等于0

文章來源:酷勤網收集 作者: 發布日期:2009-09-30
打 印】【關 閉

C#對裝箱后的值類型支持的并不好。與VB不同,==這樣的基本算術比較符無法在裝箱后的類型上得到正確的結果,即使所比較的值屬于同一類型。

變量 類型
a int 0
b decimal 0.0
c decimal 0.0
boxA boxed int 0
boxB boxed decimal 0.0
boxC boxed decimal 0.0
dynA dynamic holding an int 0
dynB dynamic holding a decimal 0.0
dynC dynamic holding a decimal 0.0

比較 C# VB
a==b true true
b==a true true
b==c true true
a.Equals(b) false <--
b.Equals(c) true <--
boxA == boxB false true
boxB == boxA false true
boxB == boxC false true
boxA.Equals(boxB) false <--
boxB.Equals(boxC) true <--
dynA == dynB true n/a
dynB == dynA true n/a
dynB == dynC true n/a

從上表可以看出,在C#3與之前的版本中,即使兩個裝箱的值都是decimal類型的,得到的也是不相等的結果,但是Decimal類的Equals方法返回的卻是true。

幸好在C#4中可以避免這樣的問題。你需要將裝箱的值都轉換為dynamic類型然后再比較,這樣即使兩個值本來的類型不相同,也可以得到正確的結果。

打 印】【關 閉

上一篇:Ajax優于JSF的幾個原因討論
下一篇:.NET和J2EE該相互學習什么
相關新聞
版權所有©威課網 粵ICP備13058727號