c#equals相關

來源:互聯網
上載者:User

標籤:

1、==是直接比較實值型別的值或參考型別的引用地址,但==不能用於struct,struct只能用equals來比較。==一般情況下與object.equals得到的結果是相等的。

2、ReferenceEquals為Object下的靜態方法,用於比較引用地址。因此所有實值型別的比較都為false。string比較特殊,只要字元相等,==、equals、Object.ReferenceEquals 三者得到的結果都是true。

 

3、對於參考型別,如果需要進行比較,直接用equals來比較,通常都是返回false。因此需要在類中進行重寫。

如果是重寫object中的equals,那麼最好也要重寫GetHashCode,具體原因尚沒有完全研究清楚,以後會補上。

也可以不重寫object中的equals,可實現 IEquatable<T>  中的equals(T obj),這是一個泛型介面,所以不用對obj進行類型檢查。

 

4、對於數組或是元組,可以進行結構比較,即比較數組或元組之間是否有相同的結構和相同的值,數組和元組都實現了IStructuralEquatable介面,該介面的equals是顯式實現的。這裡直接上代碼吧

代碼引用自:http://www.cnblogs.com/dudu/p/dotnetfx-IStructuralEquatable.html

 

int[] array1 = { 1, 2, 3 };int[] array2 = { 1, 2, 3 };Console.WriteLine(array1.Equals(array2)); //output FalseConsole.WriteLine(array1 == array2); //output FalseIStructuralEquatable equ = array1;Console.WriteLine(equ.Equals(array2, StructuralComparisons.StructuralEqualityComparer)); //output True

 

 

StructuralComparisons.StructuralEqualityComparer  是一個內建的預設用於比較結構的IEqualityComparer對象,這個介面下有一個Equals方法。
在這裡,array1的每個元素與array2中的對應的元素,都會分別使用
IEqualityComparerc對象中的Equals方法進行比較,如果三次比較都返回true,
IStructuralEquatabl.equals返回true。
比較實值型別可以用StructuralComparisons.StructuralEqualityComparer,若要比較參考型別,通常需要自己定義IEqualityComparer


5、在用object.equals進行實值型別的比較時,比較a.Equals(b),如果b能隱式轉換成a,那麼就是可視作同類型的比較,如果不能隱式轉換,則通常都是返回false

 

 

c#equals相關

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.