करने के लिए जाना याकूब के रूप में एक टिप्पणी अपने विधि बिल्कुल सही नहीं है में विस्तार से बताया। व्यक्तिगत रूप से मैं हमेशा गणितीय प्रोग्रामिंग से बचता हूं, खासकर जब तर्क की बात आती है। तो मेरा समाधान कुछ ऐसा होगा जैसे "अगर मैं जानना चाहता था कि गिनती एक है, तो इसे गिनें और इसकी तुलना एक नंबर पर करें"।
संदेश यह है:
public static bool OneIsSet(Type enumType, byte value)
{
return Enum.GetValues(enumType).Cast<byte>().Count(v => (value & v) == v) == 1;
}
public static bool OneIsSet(Type enumType, int value)
{
return Enum.GetValues(enumType).Cast<byte>().Count(v => (value & v) == v) == 1;
}
और तुम इस तरह अपने foo प्रकार के लिए उपयोग कर सकते हैं:
var toReturnFalse = (byte)(foo.Flag1 | foo.Flag2);
var toReturnTrue = (byte)foo.Flag1;
var trueWillBeReturned = OneIsSet(typeof(foo), toReturnTrue);
var falseWillBeReturned = OneIsSet(typeof(foo), toReturnFalse);
मेरा मानना है कि यह तरीकों जेनेरिक्स और प्रकार का उपयोग कर एक अधिक सामान्य तरीके से लिखा जा सकता है हैंडलिंग विधियों। हालांकि मैंने इंट और बाइट इंटम्स के लिए सबसे आम आधार प्रकारों के तरीकों को शामिल किया। लेकिन आप इसे छोटे और अन्य प्रकार के लिए भी लिख सकते हैं। इसके अलावा आप अपने कोड में कोड को रेखांकित भी कर सकते हैं। यह कोड की केवल एक पंक्ति है।
इस विधि का उपयोग करके आप देख सकते हैं कि सेट झंडे की संख्या दो या अधिक है या नहीं। सेट झंडे की गिनती 'एन' के बराबर होती है, तो नीचे दिया गया कोड सत्य लौटाता है।
Enum.GetValues(enumType).Cast<byte>().Count(v => (value & v) == v) == n;
यह बहुत आसान लगता है, हाँ। ऐसा क्यों नहीं करते? – Groo
कृपया अपने शीर्षक को "सी #:" और इस तरह से उपसर्ग न करें। यही टैग है। –
मुझे यह महसूस क्यों हो रहा है कि यह एक प्रश्न के रूप में छिपी हुई प्रश्न "मेरे समाधान को देखो" प्रश्न है ... –