सभी को नमस्कार, एक त्वरित प्रश्न है कि मैं के बारे में कुछ भी नहीं कर पा रहे ...बड़े झंडे enumerations
मैं एक परियोजना पर काम कर रहा हूँ कि झंडे की एक बड़ी संख्या के साथ ध्वज enumerations की आवश्यकता है मिल गया (40-ish के लिए), और मैं वास्तव में प्रत्येक गणना मूल्य के लिए सटीक मुखौटा में टाइप की तरह नहीं लग रहा है:
public enum MyEnumeration : ulong
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
Flag4 = 8,
Flag5 = 16,
// ...
Flag16 = 65536,
Flag17 = 65536 * 2,
Flag18 = 65536 * 4,
Flag19 = 65536 * 8,
// ...
Flag32 = 65536 * 65536,
Flag33 = 65536 * 65536 * 2
// right about here I start to get really pissed off
}
इसके अलावा, मैं भी आशा करती हूं कि मेरे लिए एक आसान (ier) जिस तरह से है कि वहाँ विभिन्न एंडियन मशीनों पर बिट्स की वास्तविक व्यवस्था को नियंत्रित करने के लिए, क्योंकि इन मानों को अंततः नेटवर्क पर क्रमबद्ध किया जाएगा:
public enum MyEnumeration : uint
{
Flag1 = 1, // BIG: 0x00000001, LITTLE:0x01000000
Flag2 = 2, // BIG: 0x00000002, LITTLE:0x02000000
Flag3 = 4, // BIG: 0x00000004, LITTLE:0x03000000
// ...
Flag9 = 256, // BIG: 0x00000010, LITTLE:0x10000000
Flag10 = 512, // BIG: 0x00000011, LITTLE:0x11000000
Flag11 = 1024 // BIG: 0x00000012, LITTLE:0x12000000
}
तो, मैं एक तरह से सोच रहा हूँ अगर कोई अच्छा तरीका मैं अपने enumerations सेट कर सकते हैं की तरह है:
public enum MyEnumeration : uint
{
Flag1 = flag(1), // BOTH: 0x80000000
Flag2 = flag(2), // BOTH: 0x40000000
Flag3 = flag(3), // BOTH: 0x20000000
// ...
Flag9 = flag(9), // BOTH: 0x00800000
}
मैं क्या कोशिश की है:
// this won't work because Math.Pow returns double
// and because C# requires constants for enum values
public enum MyEnumeration : uint
{
Flag1 = Math.Pow(2, 0),
Flag2 = Math.Pow(2, 1)
}
// this won't work because C# requires constants for enum values
public enum MyEnumeration : uint
{
Flag1 = Masks.MyCustomerBitmaskGeneratingFunction(0)
}
// this is my best solution so far, but is definitely
// quite clunkie
public struct EnumWrapper<TEnum> where TEnum
{
private BitVector32 vector;
public bool this[TEnum index]
{
// returns whether the index-th bit is set in vector
}
// all sorts of overriding using TEnum as args
}
बस सोच रहा है कि किसी के पास कोई अच्छा विचार है, धन्यवाद!
आप यहाँ पाठ के कुछ सौ लाइनों टाइप किया का उपयोग करें। आपने बुलेट को काटने क्यों नहीं दिया और मूल 40 लाइनों को टाइप किया? (आपने 1 << 1, 1 << 2, ... का उपयोग किया हो सकता है लेकिन वैसे भी ...) –
उम्म ... मैं उन समाधानों को प्रस्तुत करना चाहता था जो मैंने कोशिश की थी, "<<" and ">>" होगा काम किया, लेकिन जब मैं केवल एक बार मूल्यांकन किया जाता है तो मुझे अंतर दिखाई नहीं देता है। ऐसा नहीं है कि इसे टाइप करने में मुझे आधे घंटे लगते हैं, पाठ की कुछ सौ पंक्तियां ज्यादा नहीं हैं ...मैं बहुत कम जानकारी की तुलना में बहुत अधिक जानकारी प्रदान करता हूं ... – LorenVS
आप शिफ्ट ऑपरेटर के साथ उलंग की पूरी श्रृंखला का उपयोग कर सकते हैं, आपको केवल कंपाइलर को इंगित करने की आवश्यकता होगी कि आप जो स्थानांतरित कर रहे हैं वह एक उलझन है। 1ul << 63, 'उल' को ध्यान दें 1. –