我有3個屬性賣方對象:廠商ID,公司名稱和電子郵件:如果Equals是爲了比較單個元素而隱式比較列表是如何實現的?
我發現我可以重寫Equals方法爲了比較兩種賣方:
public override bool Equals(object obj)
{
if (obj == null || this.GetType() != obj.GetType())
return false;
Vendor v = (Vendor)obj;
if (v != null
&& v.CompanyName == this.CompanyName
&& v.Email == this.Email
&& v.VendorId == this.VendorId)
return true;
return base.Equals(obj);
}
...否則這C#無法完成,因爲它不知道兩個供應商對象是否相等,除非我專門指示它比較兩個供應商的每個對象屬性。現在
,在我的單元測試我發現,其實我可以比較,不僅供應商,但供應商的名單:
CollectionAssert.AreEqual(listOfVendors1, listOfVendors2);
,我得到的名單如下:
var listOfVendors1 = new List<Vendor>() {
new Vendor() { VendorId = 1, CompanyName="comp1", Email="[email protected]" },
new Vendor() { VendorId = 2, CompanyName="comp2", Email="[email protected]" }
};
和第二個列表:
var listOfVendors2 = new List<Vendor>() {
new Vendor() { VendorId = 1, CompanyName="comp1", Email="[email protected]" },
new Vendor() { VendorId = 2, CompanyName="comp2", Email="[email protected]" }
};
我注意到,當CollectionAssert.AreEqual(listOfVendors1,listOfVendors2);被處理時,我的自定義equals方法被調用時,首先爲listOfVendors1.First()和listOfVendors2.First(),並且如果兩個供應商的屬性是相等的,Equals方法被再次調用,從兩個的比較所述第二元件名單。
我想明白,使之成爲可能的機制,因爲我不這兩個表的內容具體迭代。如何,何時迭代完成?我很困惑。
怎樣的Equals比較含蓄(?)名單,如果打算到單個元素比較?例如Vendor1.Equals(供應商2)
爲['CollectionAssert.AreEqual'](https://msdn.microsoft.com/en-us/library/ms243763文檔。aspx)指出:*「如果兩個集合在相同的順序和數量中具有相同的元素,則它們是相等的;如果它們的值相等,則元素相等,如果它們引用相同的對象則不相等;元素的值使用」Equals '默認情況下。「* - 哪部分不清楚? – UnholySheep
我在尋找和閱讀文檔相關部分時遇到的部分。感謝您指出UnholySheep。 –