2012-10-20 18 views
16

। मैं निम्नलिखित enumमैं कैसे परीक्षण करूं कि बिटटाइम एनम में सी # में किसी अन्य बिटवाइम एनम से कोई मान शामिल है? उदाहरण के लिए

[Flags] 
public enum Stuff 
{ 
    stuff1=1, 
    stuff2=2, 
    stuff3=4, 
    stuff4=8 
} 

तो मैं तो

mystuff = Stuff.stuff1|Stuff.stuff2; 

को MyStuff सेट मैं

hisstuff = Stuff.stuff2|Stuff.stuff3; 

को hisstuff सेट मैं अब किस प्रकार जाँच कर अगर इन -ie hisstuff और MyStuff ओवरलैप दोनों कम से कम एक समान मूल्यों में से एक है?

और यदि ऐसा करने के कई तरीके हैं तो यह सबसे कुशल है? (यह एक खेल के लिए है)

उत्तर

17

सरल:

if((x & y) != 0) {...} 

यह एक बिटवाइज़ "और", तो किसी भी चौराहे के लिए परीक्षण करता है।

+0

बहुत बहुत धन्यवाद। अच्छी तरह से काम – coolblue2000

11

प्राप्त करने के लिए मूल्यों है कि दोनों मूल्यों में स्थापित कर रहे हैं, तो आप और (&) ऑपरेटर का उपयोग करें: अपने उदाहरण केवल Stuff.stuff2 में

mystuff & hisstuff 

यह आपको केवल अतिव्यापी मूल्यों के साथ एक नया मान देता है। यह जांचने के लिए कि क्या कोई मान ओवरलैप है, आप जांचते हैं कि यह शून्य है:

if ((mystuff & hisstuff) != 0) ...