बीसीएल में कई जगहें हैं जहां कोई IEqualityComparer का उपयोग कर सकता है। Enumerable.Contains या Dictionary Constructor की तरह। अगर मैं default से खुश नहीं हूं तो मैं अपने तुलनात्मक प्रदान कर सकता हूं।क्या .NET में कोई भी "संदर्भकंपर" है?
कभी-कभी मैं जानना चाहता हूं कि संग्रह में है जो बहुत ही है जिसका संदर्भ है। किसी भी अन्य अर्थ में "बराबर" नहीं माना जाता है।
प्रश्न यह है: क्या बीसीएल में मानक समानता तुलनाकर्ता मौजूद है जो केवल विधि पर निर्भर करता है?
class ReferenceComparer<T> : IEqualityComparer<T> where T : class
{
private static ReferenceComparer<T> m_instance;
public static ReferenceComparer<T> Instance
{
get
{
return m_instance ?? (m_instance = new ReferenceComparer<T>());
}
}
public bool Equals(T x, T y)
{
return ReferenceEquals(x, y);
}
public int GetHashCode(T obj)
{
return RuntimeHelpers.GetHashCode(obj);
}
}
मैं इसे अच्छी तरह से है और न ही परिदृश्यों के विचार बहुत सारे परीक्षण नहीं किया है, लेकिन यह Enumerable.Contains
और Dictionary
बहुत खुश करने के लिए लगता है:
एक है कि मैं अपने आप को लिखा था यह है।
यह दुर्भाग्यपूर्ण है कि ये सभी संग्रह जावा-एस्क्यू तरीके से लिखे गए हैं, जिसके लिए आपको एक विशिष्ट इंटरफ़ेस लागू करने वाली कक्षा लिखने की आवश्यकता है। अगर वे आपको तुलना ऑपरेटर निर्दिष्ट करने के लिए एक प्रतिनिधि में पास करने की अनुमति देते हैं, तो आप सीधे 'object.ReferenceEquals' पास कर सकते हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि दो तरीकों की आवश्यकता है (तुलना और हैशकोड)। –
जैसा कि मैं इसे समझता हूं, हालांकि, जावा समकक्ष को 'आईक्वालिटी कॉम्पैयर' में 'गेटहाशकोड' नहीं है, इसलिए जावा को प्रतिनिधि समर्थित होने पर इसे जावा में एक प्रतिनिधि के रूप में लागू किया जा सकता है। – Gabe
@ बेन ऑरिप के उत्तर को देखें: http: // stackoverflow।कॉम/प्रश्न/98033/रैप-ए-प्रतिनिधि-इन-ए-इक्विलिटीकंपियर/1239337 # 1239337 –