में जोड़ने के दौरान सभी वस्तुओं के लिए बराबर() को क्यों नहीं कहा जा रहा है मेरे पास एक प्रकार है जिसे मैं IDictionary में कुंजी के रूप में उपयोग कर रहा हूं। प्रकार के रूप में निम्नलिखितसंग्रह
public class Employee
{
public string Name { get; set; }
public int ID { get; set; }
public override bool Equals(object obj)
{
Employee emp = obj as Employee;
if (emp != null)
return emp.Name.Equals(this.Name);
return false;
}
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
}
अब मैं
IDictionary<Employee, int> empCollection = new Dictionary<Employee, int>();
Employee emp1 = new Employee() { Name = "abhi", ID = 1 };
Employee emp2 = new Employee() { Name = "vikram", ID = 2 };
Employee emp3 = new Employee() { Name = "vikram", ID = 3 };
empCollection.Add(emp1, 1);
empCollection.Add(emp2, 2);
empCollection.Add(emp3, 3);
निम्नलिखित के रूप में अपने मुख्य में निम्नलिखित के रूप में एक शब्दकोश बनाया है अब जबकि डीबगिंग मुझे पता चला केवल GetHashCode विधि यह है कि जब emp1 संग्रह में जोड़ा जाता है कुंजी प्रकार के लिए कहा जाता है, उसके बाद जब emp2 संग्रह में जोड़ा जाता है तो केवल GetHashCode विधि को फिर से बुलाया जाता है लेकिन एमपी 3 के मामले में GetHashCode और Equals विधियों को कॉल किया जाता है।
हो सकता है कि यह सवाल पूछने में बहुत बेवकूफ लग रहा हो लेकिन संग्रह में eqImp2 ऑब्जेक्ट को जोड़ा जाने पर समान विधि क्यों नहीं कहा जाता है। अंदर क्या हो रहा है। कृपया समझाएँ।
'emp2' और' emp3' के पास हैशकोड हैं, GetHashCode – Jehof
के संभावित कार्यान्वयन के आधार पर [संभावित विधि ओवरराइड होने पर GetHashCode को ओवरराइड करना क्यों महत्वपूर्ण है?] (Http: // stackoverflow।कॉम/प्रश्न/371328/क्यों-यह-महत्वपूर्ण-टू-ओवरराइड-गेटहाशकोड-कब-बराबर-विधि-ओवर-ऑर्डर) – Richard