मेरे पास कई कक्षाएं हैं जो कक्षा BaseClass
से प्राप्त होती हैं जहां BaseClass
में केवल एक आईडी आईडी है।बेस क्लास IEqualityComparer का उपयोग करके अलग करना() और अभी भी बाल वर्ग के प्रकार को वापस कर सकते हैं?
अब मुझे इन वस्तुओं में से कुछ के संग्रह पर अलग-अलग करने की आवश्यकता है।
public class PositionComparer : IEqualityComparer<Position>
{
public bool Equals(Position x, Position y)
{
return (x.Id == y.Id);
}
public int GetHashCode(Position obj)
{
return obj.Id.GetHashCode();
}
}
को देखते हुए तर्क सिर्फ Id
पर आधारित है, मैं एक ही comparer बनाई करना चाहता था दोहराव को कम करने के लिए:
public class BaseClassComparer : IEqualityComparer<BaseClass>
{
public bool Equals(BaseClass x, BaseClass y)
{
return (x.Id == y.Id);
}
public int GetHashCode(BaseClass obj)
{
return obj.Id.GetHashCode();
}
}
लेकिन मैं निम्नलिखित कोड अधिक से अधिक बच्चे कक्षाओं से प्रत्येक के लिए है इस संकलन प्रतीत होता है नहीं:
IEnumerable<Position> positions = GetAllPositions();
positions = allPositions.Distinct(new BaseClassComparer())
... के रूप में यह कहते हैं कि यह BaseClass
से Position
को परिवर्तित नहीं कर सकते। तुलनाकर्ता इस Distinct()
कॉल के वापसी मूल्य को क्यों मजबूर करता है?
इस नहीं है पहले से ही उत्तर? – nawfal
हाँ मैं संकलित और इस कोड को –