2010-05-28 14 views
6

मैं एक enum प्रकार परिभाषित किया गया है की enum मान होने की तुलना करें: EnumType अब कल्पनादो वस्तुओं है कि एक ही enum प्रकार

object A = EnumType.Value1; 
object B = EnumType.Value2; 

मैं तुलना (ए == बी) बनाने के लिए चाहते हैं मुझे सही देना परिणाम एनम के प्रकार से स्वतंत्र परिणाम। तुलना में, ऑब्जेक्ट में हमेशा enums होंगे, और दोनों एक ही प्रकार के होंगे।

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

4

There is a good article on MSDN on when to use == and when to use Equals.

मूल रूप से वहाँ समानता के 2 प्रकार हैं। यदि 2 ऑब्जेक्ट्स में संदर्भ समानता है तो उनके पास मूल्य समानता भी है (दोनों संदर्भ एक ही ऑब्जेक्ट को इंगित करते हैं, इसलिए निश्चित रूप से उनके मान समान हैं)।

इसके विपरीत, (और आपके मामले में) हमेशा सत्य नहीं है। यदि 2 वस्तुओं के मूल्य समानता है तो उनके पास संदर्भ समानता नहीं है। आपके मामले में == संदर्भ समानता के रूप में कार्य कर रहा है।

  • आमतौर पर आप क्या चाहते हैं Equals है, यह एक आभासी विधि System.Object में परिभाषित किया गया है।

  • जो आप आमतौर पर संदर्भ प्रकारों के लिए नहीं चाहते हैं == है, यह आमतौर पर तुलना करता है कि दो संदर्भ एक ही वस्तु का संदर्भ देते हैं या नहीं।

अपने मामले A और B में 2 अलग वस्तुओं में बॉक्सिंग कर रहे हैं। A पहले और B को संदर्भित करता है जो दूसरे को संदर्भित करता है। == परीक्षण और देख रहा है कि विभिन्न चीजों के लिए referring दोनों हैं।

+0

क्या एनम तुलना तुलना अपवाद को फेंक देगी? यदि हां, तो इसका समाधान क्या होगा? –

3

बस A.Equals(B) का उपयोग करें, यह आंतरिक प्रकार के बराबर को कॉल करेगा।

अपने मामले में आप == का उपयोग नहीं कर सकते क्योंकि ए और बी को 2 अलग-अलग ऑब्जेक्ट्स में बॉक्स किया गया है। संदर्भ समानता और मूल्य समानता:

संबंधित मुद्दे