請看下面的測試代碼:
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)); //falseConsole.WriteLine(object.Equals(a, b)); //trueConsole.WriteLine(a.Equals(b)); //true
對於比較Datarow還是用equals吧!
摘自:slmk