Wenn ich zwei OrderRules mit derselben Eigenschaft hinzufügen, aber andere Richtung ich beide noch brauchen
gleich betrachtet werden könnten Sie außer Kraft setzen Equals
und GethashCode
und/oder implementieren IEquatable<OrderRule>
:
public class OrderRule: IEquatable<OrderRule>
{
public OrderRule(string property)
{
this.Property = property;
}
public OrderDirection Direction { get; set; }
public String Property { get; }
public OrderRule Rule { get; set; }
public bool Equals(OrderRule other)
{
return (other != null && other.Property == this.Property);
}
public override int GetHashCode()
{
return Property?.GetHashCode() ?? int.MinValue;
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
if(ReferenceEquals(this, obj))
return true;
OrderRule other = obj as OrderRule;
return this.Equals(other);
}
}
Beachten Sie, dass die Eigenschaft schreibgeschützt ist, da Sie eine Eigenschaft oder ein Feld, das in GetHashCode
verwendet wird, nicht ändern können sollten.
Why?: „Richtlinie: die ganze Zahl von GetHashCode zurück sollte nie Im Idealfall sollte der Hash-Code eines wandelbaren Objekt ändern, aus nur Feldern berechnet werden, die nicht mutiert und daher der Hash-Wert eines Objektes ist das gleiche für sein ganzes Leben lang. "
Dieser Wert ist z. in einem Wörterbuch oder HashSet verwendet, um den Hashcode zu berechnen. Wenn es sich ändern würde, nachdem das Objekt hinzugefügt wurde, konnte es nicht mehr gefunden werden.
Sie müssen Equals und GetHashCode Methoden implementieren –
Was verhindert, dass Sie es in der Weise implementieren, die Sie erwähnt haben? –
@TimSchmelter Wenn ich zwei OrderRules mit gleicher Eigenschaft aber unterschiedlicher Richtung hinzufüge, muss ich beide noch als gleich betrachten. –