Eşitlik üyeleri oluşturmak için ReSharper kullanıyorum. İsterseniz, isteğe bağlı olarak IEquatable<T>
ve geçersiz kılan operatörleri de kullanabilirsiniz (tabi ki hiç bir zaman yapmazsınız, ancak yine de iyidir).
Eşittirlerin uygulanması, Object.Equals(Object)
bir geçersiz kılma ile birlikte, güçlü yazılan bir varyantı (gereksiz tür denetimini önleyebilir) içerir. Daha az yazılan sürüm, tip kontrolü yaptıktan sonra güçlü bir şekilde yazılanı çağırır. Güçlü yazılan sürüm, bir referans eşitlik denetimi (Object.ReferenceEquals(Object,Object)
) gerçekleştirir ve daha sonra tüm alanların değerlerini (iyi, yalnızca jeneratörü dahil edeceğini söyleyenler) karşılaştırır. GetHashCode
gelince
, alanın GetHashCode
değerlerinin bir akıllı factorisation (eğer derleyici 'checked
seçeneğini kullanırsanız taşma durumları önlemek için unchecked
kullanarak) birleştirilir. Her alanın değerleri (birinciden ayrı olarak) birleştirilmeden önce asal sayılarla çarpılır. Ayrıca hangi alanların asla boş kalacağını belirtebilirsiniz ve herhangi bir null çek içermeyecektir. İşte
sonra "
Eşitlik Üyeler üret" seçilerek
ALT+Insert
basarak
Polygon
sınıf için elde ne:
tek alan
public class Polygon : IEquatable<Polygon>
{
public Point[] Vertices { get; set; }
public bool Equals(Polygon other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other.Vertices, Vertices);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (Polygon)) return false;
return Equals((Polygon) obj);
}
public override int GetHashCode()
{
return (Vertices != null ? Vertices.GetHashCode() : 0);
}
}
Ben geçerli değildir, yukarda bahsettiğim özelliklerden bazıları olarak orada . Dizinin içeriğini kontrol etmediğini de unutmayın. Yine de, ReSharper, genel olarak birkaç saniyede bir çok mükemmel kodu dışarıda pompalamaktadır. Ve bu özellik ReSharper'ı inanılmaz bir araç haline getiren şeyler listemde oldukça düşük.
kod nesil Eşittir, ama genel bir algoritma Uygulayacak kişi için. Galiba burada şansın yok. – erikkallen