我有以下枚举:如何获取枚举值;
天数:
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