2012-06-13 14 views
32

पर विचार करेंunsetting एक enum झंडा

[Flags] 
    public enum State 
    { 
     IsCool = 0x1, 
     SomethingElse = 0x2 
    } 

मैं एक State someState है और कुछ अभिव्यक्ति सही का आकलन करता है, तो, मैं परवाह किए बिना someStateकी IsCool झंडा अनसेट के यह पहले से ही सेट है या सेट की जा रही चाहते हैं। इसका मतलब है कि मैं वास्तव में someState ^= State.IsCool का उपयोग नहीं कर सकता लेकिन मैं इसके बजाय क्या उपयोग कर सकता हूं?

उत्तर

74

ध्वज सेट करते समय आपको इसे विपरीत तरीके से संपर्क करने की आवश्यकता है: bitwise और वर्तमान स्थिति जो ध्वज को हटाना चाहते हैं उसके पूरक के साथ।

someState &= ~State.IsCool; 
+2

मैंने लंबे समय तक एक्सओआर (सशर्त रूप से) का उपयोग किया, जब तक मैं बैठ गया, कुछ सच्चे तालिकाओं को लिखा और न ही दृष्टिकोण की खोज की। इतना आसान है! –

+1

सुंदर। '~' ऑपरेटर नहीं पता था। – kasperhj