C 判斷物件相等的陷阱

2021-09-08 08:12:20 字數 866 閱讀 4312

請看下面的測試**:

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...