आज मैंने लिखा एक दिलचस्प बग पर ठोकर खाई। मेरे पास गुणों का एक सेट है जिसे एक सामान्य सेटर के माध्यम से सेट किया जा सकता है। ये गुण मूल्य प्रकार या संदर्भ प्रकार हो सकते हैं।बॉक्स किए गए मान प्रकारों की तुलना
public void SetValue(TEnum property, object value)
{
if (_properties[ property ] != value)
{
// Only come here when the new value is different.
}
}
इस विधि के लिए यूनिट परीक्षण लिखते समय मुझे पता चला कि स्थिति हमेशा मूल्य प्रकारों के लिए सच है। यह पता लगाने में मुझे लंबा समय नहीं लगा कि यह boxing/unboxing के कारण है। यह मुझे लंबे समय तक या तो नहीं लिया निम्न के कोड को समायोजित करने:
public void SetValue(TEnum property, object value)
{
if (!_properties[ property ].Equals(value))
{
// Only come here when the new value is different.
}
}
बात मैं पूरी तरह से इस समाधान से संतुष्ट नहीं कर रहा हूँ है। जब तक मूल्य बॉक्स नहीं किया जाता है, तब तक मैं एक साधारण संदर्भ तुलना रखना चाहता हूं।
वर्तमान समाधान जो मैं सोच रहा हूं वह केवल बॉक्स किए गए मानों के लिए Equals()
पर कॉल कर रहा है। a check for a boxed values करना थोड़ा अधिक लगता है। क्या कोई आसान तरीका नहीं है?
आप अलग चाहते हैं निश्चित रूप से अगर बॉक्स किए गए मानों के लिए व्यवहार तो आपको यह जांचने की आवश्यकता होगी कि क्या आप बॉक्स किए गए मान से निपट रहे हैं या नहीं? – LukeH
टाइप विधि के साथ इस विधि का एक सामान्य अधिभार बनाएं जहां टी: संरचना –
@ लुकास, तब तक काम नहीं करेगा जब तक कि केवल 'टी' और बाधा से अधिक अंतर न हो। –