2012-12-31 9 views
10

मैं चार bool चर है, कहते हैं:जांच कर रहा है कि चार बुलियन चर के बराबर मूल्य है, स्पष्ट नहीं है?

bool a=true; 
bool b=false; 
bool c=true; 
bool d=false; 

तो मैं जाँच करने के लिए कि उन चार बराबर हैं चाहता हूँ। तथापि;

Console.WriteLine(true == false == true == false); 
true 

ऐसा क्यों हो रहा है? मुझे लगता है कि यह एक समीकरण के evalution आदेश है, जो बाएं से दाएं चला जाता है की वजह से है:

((true == false) == true) == false 
(false == true) == false 
false == false 
true 

तो जाँच करने के लिए सभी एन> 2 बूलियन चर बराबर हैं कि क्या एक उचित तरीका क्या है?

+1

आपकी धारणा सही है। यदि एक ही ऑपरेटर को अभिव्यक्ति के दौरान उपयोग किया जाता है ... ऑपरेटर प्राथमिकता का मतलब कुछ भी नहीं है .. वे सभी समान हैं .. –

उत्तर

3

एक स्पष्ट तरीका ==


चेक के बजाय) उन्हें युग्मित और .Equals (उपयोग करने के लिए किया जाएगा यह विकल्प, यह हो सकता है कि आप क्या चाहते हैं - Equality comparison between multiple variables

+0

जेनेरिक समाधान के लिए धन्यवाद .. – thkang

7
if(a==b && a==c && a==d) 

आप bools के चर संख्या है, तो न केवल 4

var bools = new bool[] { a, b, c, d }; 
var areAllEqual = bools.Skip(1).All(b=>b==bools[0]); 
+1

+1 ओह, आपने पहले ही सरणी के बारे में उल्लेख किया है (इसके अलावा आप बूल के बजाय भी उपयोग कर सकते हैं [0] चूंकि आपके पास पहले से ही मूल्य है) – V4Vendetta

2

मुझे लगता है कि आप उन्हें एक सरणी में डाल सकते हैं और n सभी ऑपरेटर

yourboolarray.All(x=>x == a) // compare with any a,b,c,d 
1

आप इस

के लिए बिटवाइज़ तरीकों का उपयोग कर विचार कर सकते हैं का उपयोग करें जहां bools का पूर्णांक प्रतिनिधित्व द्वारा 0 या 15

(या किसी भी मूल्य बिट्स की संख्या के आधार पर) के बराबर होता है

को कुछ कोड पुनर्गठन की आवश्यकता हो सकती है हालांकि

+0

क्या? नहीं। यदि आप उन्हें इनट्स में बदलने जा रहे हैं, तो आप उन्हें भी गिन सकते हैं। लेकिन वास्तव में, मूल्यों को उनके 'प्राकृतिक' प्रकारों में छोड़ा जाना चाहिए, इस तरह कास्ट नहीं किया जाना चाहिए। –

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