सोचा कि यह मेरे जैसे अन्य लोगों के लिए उपयोगी हो सकता है।
सावधान रहें कि आप किसी भी एनम मूल्यों को कैसे संभालते हैं जो आप मान == 0 के लिए निर्धारित कर सकते हैं (कभी-कभी यह एनम के लिए एक अज्ञात या निष्क्रिय स्थिति के लिए सहायक हो सकता है)। जब इन बिट हेरफेर ऑपरेशन पर भरोसा करते हैं तो यह समस्या पैदा करता है।
इसके अलावा जब आपके पास एनम मान है जो 2 मानों की अन्य शक्ति के संयोजन हैं, जैसे
public enum Colour
{
None = 0, // default value
RED = 2,
BLUE = 4,
GREEN = 8,
YELLOW = 16,
Orange = 18 // Combined value of RED and YELLOW
}
इन मामलों में एक विस्तार विधि जैसे कि यह काम आ सकती है:
public static Colour UnSet(this Colour states, Colour state)
{
if ((int)states == 0)
return states;
if (states == state)
return Colour.None;
return states & ~state;
}
और समतुल्य आइससेट विधि भी है जो संयुक्त मूल्यों को संभालती है (यद्यपि हैकी तरीके से थोड़ा सा)
public static bool IsSet(this Colour states, Colour state)
{
// By default if not OR'd
if (states == state)
return true;
// Combined: One or more bits need to be set
if( state == Colour.Orange )
return 0 != (int)(states & state);
// Non-combined: all bits need to be set
return (states & state) == state;
}