2009-11-17 16 views
15

क्या सी # में or ऑपरेटर है?सी # 'या' ऑपरेटर?

मैं क्या करना चाहते हैं:

if (ActionsLogWriter.Close or ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 

लेकिन मैं कैसे मैं ऐसा ही कुछ कर सकता है यकीन नहीं है।

+0

स्पष्ट है कि, "या" एक ऑपरेटर और नहीं एक बयान है। – JoshJordan

+20

@ लन्डेबी: आपके प्रश्न सी # की एक अजीब असमान समझ प्रकट करते हैं। पैकेज प्रबंधकों से निपटने से पहले और जो कुछ भी आप काम कर रहे हैं, उससे पहले खुद को संतुलित करने के लिए कुछ ट्यूटोरियल्स के माध्यम से चलने पर विचार करें। msdn.microsoft.com/en-us/library/... शुरू करने के लिए एक जगह है। –

+0

उल्लेख नहीं है कि अगर आप के साथ शुरू करने के लिए कथन है तो आपको अजीब मिला है। आप केवल दूसरी शर्त के बारे में स्पष्ट क्यों हैं, और पहले के साथ निहित? – mpen

उत्तर

67

सी # दो बूलियन or ऑपरेटरों का समर्थन करता है।

अंतर यह है कि | हमेशा की तरह, दोनों को छोड़ दिया और सही परिस्थितियों की जाँच करता है, जबकि || केवल दाईं ओर हालत की जाँच करता है अगर यह आवश्यक है (यदि बाईं ओर गलत का आकलन) है।

यह महत्वपूर्ण है जब दाएं तरफ की स्थिति में प्रसंस्करण या साइड इफेक्ट्स में परिणाम शामिल होते हैं। (उदाहरण के लिए, यदि आपकी ErrorDumpWriter.Close विधि को कुछ राज्य पूरा करने या बदलने के लिए थोड़ी देर लग गई।)

+0

इसे पढ़ना चाहिए: || बायीं तरफ झूठी तरफ मूल्यांकन करने पर केवल दायीं तरफ की स्थिति की जांच होती है? चूंकि सत्य या कुछ भी हमेशा सत्य है? – ParmesanCodice

+0

बस एक मामूली बात - इसके अलावा अधिक बूलियन ऑपरेटर हैं, शायद "दो बूलियन/तर्क या ऑपरेटर" को दोहराएं। – sharkin

+0

ठीक है, मैं नींद के दौरान टाइपिंग के लिए -2 तक हूं। :) –

4
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true) 
{ // Do stuff here 
} 
1

सिर्फ सी और सी में की तरह ++, बूलियन या ऑपरेटर ||

if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 
2

है या सी # में || है।

आप this पर एक नज़र डाल सकते हैं। एकल पट्टी | और डबल बार ||:

6

सी # या ऑपरेटर में संक्षिप्त सर्किटिंग का भी उल्लेख करने योग्य है। अपने उदाहरण में, बंद एक संपत्ति हो रहा है, लेकिन अगर यह एक विधि होती तो यह है कि ध्यान देने योग्य है:

if (ActionsLogWriter.Close() || ErrorDumpWriter.Close()) 

से

if (ErrorDumpWriter.Close() || ActionsLogWriter.Close()) 

मौलिक रूप से अलग सी # में है अगर पहली अभिव्यक्ति सच देता है, , दूसरी अभिव्यक्ति का मूल्यांकन नहीं किया जाएगा। बस इसके बारे में पता होना चाहिए। यह वास्तव में ज्यादातर समय आपके लाभ के लिए काम करता है।

+1

क्या इससे कोई फर्क पड़ता है कि यह संपत्ति या विधि है? इस संदर्भ में मुझे लगता है कि संपत्ति-कोड को केवल विधियों के लिए भी कहा जाता है। – sharkin

+0

यह एक अच्छा मुद्दा है। यदि गुणों के दुष्प्रभाव होते थे (जो भी बहुत खराब डिजाइन है) वही चेतावनी लागू होती है। – Josh

1

एकल "|" ऑपरेटर अभिव्यक्ति के दोनों तरफ मूल्यांकन करेगा।

if (ActionsLogWriter.Close | ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 

डबल ऑपरेटर "||" अभिव्यक्ति सही होने पर केवल बाएं तरफ का मूल्यांकन करेगा।

if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true) 
{ 
    // Do stuff here 
} 

सी # सेल्सियस तक ++ कई समानताएं है लेकिन उनके अभी भी दो भाषाओं के बीच मतभेद हैं;)

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