मैं समानता सदस्यों को उत्पन्न करने के लिए रीशेपर का उपयोग करता हूं। यदि आप चाहते हैं तो यह वैकल्पिक रूप से IEquatable<T>
को ओवरराइड करने वाले ऑपरेटरों को लागू करेगा (जो निश्चित रूप से आप कभी नहीं करते हैं, लेकिन यह वैसे भी अच्छा है)।
बराबर के कार्यान्वयन में Object.Equals(Object)
का ओवरराइड शामिल है, साथ ही दृढ़ता से टाइप किए गए संस्करण (जो अनावश्यक प्रकार की जांच से बच सकते हैं) शामिल हैं। कम टाइप किए गए संस्करण में एक प्रकार की जांच करने के बाद मजबूती से टाइप किया गया है। दृढ़ता से टाइप किया गया संस्करण संदर्भ समानता जांच (Object.ReferenceEquals(Object,Object)
) करता है और फिर सभी फ़ील्ड के मानों की तुलना करता है (ठीक है, केवल वे जिन्हें आप जनरेटर को शामिल करने के लिए कहते हैं)।
GetHashCode
का सवाल है, इस क्षेत्र की GetHashCode
मूल्यों की एक स्मार्ट गुणनखंड (unchecked
का उपयोग कर यदि आप संकलक के checked
विकल्प का उपयोग अतिप्रवाह अपवाद से बचने के लिए) मिलाया जाता है। क्षेत्र के प्रत्येक मूल्य (पहले के अलावा) संयुक्त होने से पहले प्रमुख संख्याओं से गुणा किया जाता है। आप यह भी निर्दिष्ट कर सकते हैं कि कौन से फ़ील्ड कभी शून्य नहीं होंगे, और यह किसी भी शून्य जांच को छोड़ देगा।
यहाँ तुम क्या ALT+Insert
दबाने फिर का चयन "उत्पन्न समानता सदस्य" करके अपने Polygon
वर्ग के लिए प्राप्त होते हैं:
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);
}
}
सुविधाओं के बारे में मैं ऊपर बात लागू नहीं है में से कुछ वहाँ केवल एक क्षेत्र के रूप में । ध्यान दें कि उसने सरणी की सामग्री की जांच नहीं की है।
सामान्य रूप से, रीशेर्पर सेकंड के मामले में बहुत सारे उत्कृष्ट कोड को पंप करता है। और यह सुविधा मेरी चीजों की सूची पर बहुत कम है जो ReSharper को एक अद्भुत टूल बनाती है।
स्रोत
2009-06-07 22:44:15
आप की तलाश में नहीं हो रहे हैं कोड पीढ़ी के बराबर है, लेकिन एक सामान्य एल्गोरिथ्म implementer के लिए। मुझे लगता है कि आप यहां भाग्य से बाहर हैं। – erikkallen