C# 如何获取枚举值;

C# 如何获取枚举值;,c#,enums,C#,Enums,我有以下列举: 天数: Sunday 1 Monday 2 Tuesday 4 Wednesday 8 Thursday 16 Friday 32 Saturday 64 周/月 First 256 Second 512 Third 1024 Fourth 2048 例如,我有数字514,它是512(Second)+2(Monday)的和 如果我只有514这个数字,我怎么能得到第二个和星期一呢?你可以对每个可能的值进行逻辑AND运算。所有

我有以下列举:

天数:

Sunday    1
Monday    2
Tuesday   4
Wednesday 8
Thursday  16
Friday    32
Saturday  64
周/月

First     256
Second    512
Third     1024
Fourth    2048
例如,我有数字514,它是512(
Second
)+2(
Monday
)的和


如果我只有514这个数字,我怎么能得到第二个和星期一呢?

你可以对每个可能的值进行逻辑AND运算。所有返回非零的值都是您想要的值

var finalValue = ... // 512 -> 1000000010
var possibleValues = ... // array of flags [00000001, 000000010, 00000100, 00001000 ... ]

var appliedFlags = possibleValues.Where(x => x & finalValue == x).ToList();

我有一个想法,因为我可以看到它似乎是二进制序列,所以你可以将这个数字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

如果希望能够组合多个
值或
月值,则
[Flags]
属性非常重要。例如
((天)3).ToString()
将返回
星期天、星期一
。如果忘记了
[Flags]
属性,则返回的字符串为
3

未测试,但应该可以工作: 取数字除以第一个月值的int值。结果将是双重的,忽略逗号后面的所有内容。现在您有了WeekOfMonth的值。 然后使用mod(%)除法获得除法的其余部分,以获得表示天数值的剩余值

代码:

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);

我不确定是否所有的演员都在工作,但它应该给你一个想法;)

嘎-我只是在打那个+1 ;-)嗯,在我的代码中,我添加了[Flags],只是忘记发布了(你想做什么?你需要一个枚举吗?似乎涉及到序列或逻辑,也许你可以编写一些代码来代替。感谢你接受这个答案。就个人而言,我更喜欢@Martin的答案。我真希望我想到了这一点:P