程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#判斷對象相等的陷阱

C#判斷對象相等的陷阱

編輯:C#入門知識

 

請看下面的測試代碼:

 

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved