प्रकार की सूची कभी नहीं बदलता, तो आप ऐसा कर सकते हैं:
NotificationMethodType allTypes = NotificationMethodType.Email |
NotificationMethodType.Fax |
NotificationMethodType.Sms;
NotificationMethodType notAssigned = allTypes & ~types;
~ एक व्युत्क्रम मूल्य बनाता है सभी बिट्स inverting द्वारा,।
enum में दो नए नाम शामिल करने के लिए किया जाएगा कम से कम "allTypes" enum करने के लिए स्थानीय की परिभाषा रखने के लिए इस तरह के enums परिभाषित करने के लिए एक विशिष्ट तरीका:
[Flags]
public enum NotificationMethodType {
None = 0,
Email = 1,
Fax = 2,
Sms = 4,
All = Email | Fax | Sms
}
नोट: तुम जाओ तो en12 के लिए All
मान जोड़ने का मार्ग, ध्यान दें कि types
खाली था, तो आपको प्रिंट "ईमेल, फैक्स, एसएमएस" के रूप में, बल्कि "सभी" के रूप में एक enum नहीं मिलेगा।
आप मैन्युअल रूप से allTypes
की सूची बनाए रखने के लिए नहीं करना चाहते हैं, तो आप इसे Enum.GetValues
विधि का उपयोग कर सकते हैं:
NotificationMethodType allTypes = 0;
foreach (NotificationMethodType type in Enum.GetValues(typeof(NotificationMethodType)))
allTypes |= type;
या आप LINQ के साथ भी ऐसा कर सकते हैं:
NotificationMethodType allTypes =
Enum.GetValues(typeof(NotificationMethodType))
.Cast<NotificationMethodType>()
.Aggregate ((current, value) => current | value);
यह enum के सभी व्यक्तिगत मूल्यों को एक साथ जोड़कर allType
मान बनाता है।
स्रोत
2011-03-21 12:00:23
fwiw, XOR (^ ऑपरेटरों) लासे की 'नहीं है और' को तोड़ने और उत्तर के बिना enum करने के लिए चीजों को जोड़ सकते हैं गणितीय एक ही बात कर रहे हैं। –