Equals को ओवरराइड करते समय GetHashCode को ओवरराइड करना क्यों महत्वपूर्ण है?
सभी को नमस्कार! मैं एक शुरुआती C# डेवलपर हूँ, और मुझे Equals और GetHashCode मेथड्स को लेकर भ्रम हो गया है।
मैंने `Name` और `Age` फील्ड्स के साथ एक सरल `Person` क्लास बनाया। मुझे चाहिए कि दो ऑब्जेक्ट्स को समान माना जाए यदि उनके ये फील्ड्स मेल खाते हैं। इसलिए मैंने `Equals` मेथड को ओवरराइड किया:
```csharp
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
Person other = (Person)obj;
return Name == other.Name && Age == other.Age;
}
}
```
जब मैं सीधे ऑब्जेक्ट्स की तुलना करता हूँ तो सब कुछ ठीक काम करता है: `person1.Equals(person2)` समान डेटा के लिए `true` लौटाता है। लेकिन जब मैंने इस क्लास को `HashSet` में उपयोग करने की कोशिश की, तो मैंने अजीब व्यवहार देखा। भले ही दो `Person` ऑब्जेक्ट्स में समान Name और Age हों, `HashSet` उन्हें अलग मानता है और दोनों को जोड़ देता है। उदाहरण के लिए:
```csharp
Hash