我有以下枚舉:如何獲取枚舉值;
天數:
Sunday 1
Monday 2
Tuesday 4
Wednesday 8
Thursday 16
Friday 32
Saturday 64
WeekOfMonth
First 256
Second 512
Third 1024
Fourth 2048
我有,例如,這是512的總和的數目514(Second
)+2(Monday
)。
我如何獲得第二個&星期一如果我只有514號?
我有以下枚舉:如何獲取枚舉值;
天數:
Sunday 1
Monday 2
Tuesday 4
Wednesday 8
Thursday 16
Friday 32
Saturday 64
WeekOfMonth
First 256
Second 512
Third 1024
Fourth 2048
我有,例如,這是512的總和的數目514(Second
)+2(Monday
)。
我如何獲得第二個&星期一如果我只有514號?
您可以對每個可能的值進行邏輯與。所有返回非零值的值都是您想要的值。
var finalValue = ... // 512 -> 1000000010
var possibleValues = ... // array of flags [00000001, 000000010, 00000100, 00001000 ... ]
var appliedFlags = possibleValues.Where(x => x & finalValue == x).ToList();
感謝您接受答案。我個人更喜歡@ Martin的答案。我只是希望我想到了這一點:P –
幸虧我,因爲我可以看到它的想法似乎是二進制序列,這樣可以減去此數514,這將是512,然後做同樣的過程,最近的二進制其餘直到你得到0 。
表示你的想法,如在代碼:) –
假設如下定義:
[Flags]
enum Days {
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
[Flags]
enum WeekOfMonth {
First = 256,
Second = 512,
Third = 1024,
Fourth = 2048
}
您可以使用此代碼獲取所需的字符串:
var value = (Int32) WeekOfMonth.Second + (Int32) Days.Monday; // 514
var days = (Days) (value & 0xFF);
var weekOfMonth = (WeekOfMonth) (value & 0xFF00);
var str = String.Format("{0} & {1}", weekOfMonth, days);
根據需要,變量str
將包含Second & Monday
。
如果您希望能夠合併多個Days
值或WeekOfMonth
值,則[Flags]
屬性非常重要。例如((Days) 3).ToString()
將返回Sunday, Monday
。如果您忘記[Flags]
屬性,則返回的字符串是3
。
嘎 - 我只是打字! +1 ;-) – dash
那麼,在我的代碼中,我添加了[Flags],只是忘了發佈它。 :( –
未經測試但應該工作: 取數字並將其除以第一個WeekOfMonth值的int值。結果將是雙重的,忽略逗號後面的意思。現在你有了WeekOfMonth的價值。 之後使用mod(%)除法得到除法的其餘部分以獲取代表您的Days值的剩餘值。
在代碼:
var intValue = (int)WeekOfMonth.Second + (int)Days.Monday; //514
var weekOfMonth = (WeekOfMonth)Convert.ToInt32(intValue/(int)WeekOfMonth.First);
var day = (Days)(intValue % (int)WeekOfMonth.First);
我不知道如果所有的強制類型轉換工作,但它應該給你的想法;)
你到底想幹什麼?你需要在那裏枚舉嗎?似乎有一個序列或邏輯涉及,也許你可以寫一些代碼。 – pavanred