मेरे पास एक PagedModel क्लास है जो पेजिंग डेटा को अनदेखा करने के लिए केवल मॉडलडेटा को वापस करने के लिए IENumerable लागू करता है। मैंने बराबर और GetHashCode को दो मॉडल किए गए मॉडेल ऑब्जेक्ट्स को उनके मॉडलडेटा, पेज नम्बर, और टोटलपेज और पेजसाइज द्वारा तुलना करने की अनुमति देने के लिए ओवरराइड किया है।Assert.AreEqual मेरे इक्व्यूल्स का उपयोग नहीं करता है INumerable कार्यान्वयन
यहाँ समस्या
Dim p1 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
Dim p2 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
p1.Equals(p2) =====> True
Assert.AreEqual(p1, p2) ======> False!
यह NUnit की तरह लग रहा है, यह आंतरिक EnumerableEqual विधि है तुलना करने के लिए बुला रहा है मेरी PagedModel के बजाय तरीकों मैं प्रदान की बराबर का उपयोग करने का! क्या इस व्यवहार को ओवरराइड करने का कोई तरीका है, या मुझे कस्टम दावा लिखना है।
यह उत्तर क्या कह रहा है कि अनिवार्य रूप से आपके कार्यान्वयन में आपको IEquatable स्पष्ट रूप से कार्यान्वित करने की आवश्यकता है ... देखें http://stackoverflow.com/questions/1577149/explicit-interface-implementation-in-vb-net –
Jay
नहीं, IEquatable लागू करना पर्याप्त नहीं है। GetHashCode कार्यान्वयन उतना ही महत्वपूर्ण है। यह समझना भी महत्वपूर्ण है कि यदि आप IEquatable (मेरी पोस्ट में उद्धरण देखें) को लागू नहीं करते हैं तो इक्व्यूमेबल फॉल्स-बैक बैक-बैक (ऑब्जेक्ट) का उपयोग करने के लिए वापस आते हैं, इसलिए ऐसा करने की बिल्कुल आवश्यकता नहीं है। –
csauve
मैंने स्पष्ट रूप से IEquatable.Equals को लागू करने के लिए कहा जो डिफ़ॉल्ट फॉलबैक की अनुमति नहीं देनी चाहिए क्योंकि विधि ओवरराइड हो जाएगी और स्पष्ट रूप से कार्यान्वयन विधि को कॉल करेगा ... – Jay