C 判斷物件相等的陷阱

2021-12-29 20:57:33 字數 652 閱讀 7545

請看下面的測試**:

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)); b)); //true

對於比較datarow還是用equals吧!

摘自:slmk

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