GetHashCode لفئة مع كائن قائمة [نسخة مكررة]
-
06-07-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
لدي مثل هذا الفصل:
public class Cycle
{
public List<int> Edges
{
get;
private set;
}
public override bool Equals(object obj)
{
Cycle cycle = (Cycle)obj;
var list1 = cycle.Edges;
var list2 = Edges;
var same = list1.Except(list2).Count() == 0 &&
list2.Except(list1).Count() == 0;
return same;
}
public override int GetHashCode()
{
// return Edges.GetHashCode();
}
}
كما ترون، إذا كان اثنان Edge
القوائم هي نفسها, ثم أرى Cycles
على النحو نفسه.
والمشكلة الآن هي كيفية تنفيذ GetHashCode()
?
حاولت Edges.GetHashCode()
, ولكن المشكلة هي أن اثنين List<Cycle>
, ، مع نفس الشيء Cycle
كائن ولكن ترتيبات مختلفة، سيتم اعتبارها مختلفة، على الرغم من أنها يجب أن تكون هي نفسها.
المحلول
يمكنك أن تفعل شيئًا مثل:
override int GetHashCode()
{
return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}
إنها بسيطة، ولكن يجب أن تكون متسقة.
لا تنتمي إلى StackOverflow