嘿大家,有一個快速的問題,我似乎無法找到任何東西...大標誌枚舉
我工作的一個項目,需要有大量的標誌旗枚舉(高達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
}
所以,我有種想知道是否有一些冷靜的方式來設置我的枚舉像:
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,...而不是乘法,但是無論如何...) – 2010-05-07 22:45:24
嗯......我確實想提出我曾試過的解決方案,「<<" and ">>」會有工作,但當他們只被評估一次時,我不會完全看到差異。它不需要花費我半個小時才能輸出,幾百行文字並不多...我寧願提供太多的信息,也不能太少... – LorenVS 2010-05-07 22:51:42
您可以使用全變量運算符的ulong,您只需向編譯器指出您正在轉換的是一個ulong。 1ul << 63,注意'ul'的1. – 2010-05-07 23:09:19