請看下面的測試**:
object a =
11;object b =
11;console.writeline(a == b); //輸出false
實際開發過程中,可能不會這麼直觀,例如如下場景,我們要查詢datarow中的字段是否相等,你可能會這樣寫:
datarow hbrow = needaddrows.where(p => p["dh"] == dr["
dh"]).firstordefault(); //
dr is a datarow
那麼,恭喜你!你中獎了!:) hbrow永遠是null。因為p["dh"] 和 dr[「dh"]都是object型別。但鬱悶的是如果你輸出:
?p["dh"].gettype().name //
輸出int32
這就是所謂的object對值型別valuetype的裝箱與拆箱造成的。
看看下面的測試**就一目了然了:
object a = 11;object b = 11;
console.writeline(a == b); //相當於referenceequals,比較引用當然不相等了!
console.writeline(object.referenceequals(a, b)); //false
console.writeline(object.equals(a, b)); //true
console.writeline(a.equals(b)); //true
對於比較datarow還是用equals吧!
C 判斷物件相等的陷阱
請看下面的測試 object a 11 object b 11 console.writeline a b 輸出false 實際開發過程中,可能不會這麼直觀,例如如下場景,我們要查詢datarow中的字段是否相等,你可能會這樣寫 datarow hbrow needaddrows.where p p...
物件相等判斷
object 型別中於相等有關的方法 public virtual bool equals object obj public static bool referenceequals object obja,object objb public static bool equals object o...
C 判斷兩個物件是否相等
首先在c 中判斷物件相等,是對於引用型別的,兩個 物件用 只是判斷他們的記憶體位址是否一樣 對於字串或者數值,判斷相等只需要用 運算 引用型別 1.對乙個類只是例項化一次 向那些只有賦值沒有new例項化乙個物件的話,拿這些物件指的都是乙個位址 people p1 newpeople people p...