2012-05-09 14 views
10

संभव डुप्लिकेट:
Why are there no ||= or &&= operators?और& = सी # में? (बूलियन अभिव्यक्ति)

शुद्ध दुर्घटना से मैं आज पता चला कि

a &= GetBool(); 

a = a && GetBool(); 
के रूप में ही नहीं है

मुझे वर्षों से गलत समझा जाना चाहिए। पहले उदाहरण में, "GetBool()" निष्पादित किया गया है भले ही "ए" गलत है। दूसरे में, यह नहीं है।

"& & =" सी # में कुछ हासिल करने के लिए कुछ भी है?

+1

'a & = a? getBool(): सत्य; ' –

+3

@ सोहोजुन: यह 'सत्य' के बजाय 'झूठा' होना चाहिए। – leppie

+5

मेरा मानना ​​है कि एरिक ने ब्लॉग किया है कि '&& =' क्यों उपलब्ध नहीं है ..... आह यहाँ यह http://blogs.msdn.com/b/ericlippert/archive/2012/04/19/null-is-not नहीं है -फल्से-भाग-तीन.aspx – V4Vendetta

उत्तर

4

documentation से:

& = असाइनमेंट ऑपरेटर का उपयोग कर एक अभिव्यक्ति है, इस तरह के रूप में

एक्स & = y

एक्स = एक्स & y

के बराबर है

सिवाय इसके कि एक्स केवल एक बार मूल्यांकन किया जाता है। & ऑपरेटर बिटवाई लॉजिकल और इंटीग्रल ऑपरेटरों और लॉजिकल पर ऑपरेशन करता है और बूल ऑपरेंड पर करता है।

मैं y के मूल्यांकन से बचने के लिए कह सकते हैं कि, जब आवश्यक नहीं है, का उपयोग

x = x && y 

और एक्स के मूल्यांकन में दो बार से बचने के लिए (जो इसका मतलब है), का उपयोग

x &= y 

आप कर सकते हैं दोनों गठबंधन नहीं करते हैं।

माइक्रो-अनुकूलित (कम से कम एक सैद्धांतिक मामले के लिए), यह होगा:

if (x) x = y; 

आप अगर एक्स पहले से ही false है कुछ करने की ज़रूरत नहीं है।

+3

"एक बार मूल्यांकन" अधिक जटिल मामलों के लिए है, उदाहरण के लिए यदि आपके पास 'x [i + 3] = x [i + 3] & y;' तो 'i + 3' की गणना दो बार की जाती है, जाहिर है! –

+0

@ एमआर लिस्टर: यह समझ में आता है, मैंने इस पर विचार नहीं किया। गुण भी हैं, जहां आप & = ऑपरेटर का उपयोग कर सकते हैं, जिसमें मनमाने ढंग से जटिल कार्यान्वयन हो सकता है (यदि यह एक अच्छा डिज़ाइन अलग है)। –

6

"& & =" सी # में कुछ हासिल करने के लिए कुछ भी है?

ठीक है, आप

a = a && getBool(); 
बजाय

लिख सकते हैं ... मैं कई स्थितियों में, जहां मैं वास्तव में कुछ अलग करना चाहते हैं चाहते हैं के बारे में सोच नहीं कर सकते, ईमानदार होना। यहां तक ​​कि उपरोक्त भी दुर्लभ है, आईएमई।

&&, || या ?? (जो स्पष्ट "शॉर्ट सर्किटिंग" ऑपरेटर हैं) के लिए परिभाषित कोई कंपाउंड असाइनमेंट ऑपरेटर नहीं है। सटीक यौगिक असाइनमेंट के बारे में अधिक जानकारी के लिए कंपाउंड असाइनमेंट ऑपरेटरों की पूरी सूची के लिए सी # 4 स्पेक की धारा 7.17 और अनुभाग 7.17.2 देखें।