如何获得枚举值;

Jam*_*ame 3 c# enums

我有以下枚举:

天:

Sunday    1
Monday    2
Tuesday   4
Wednesday 8
Thursday  16
Friday    32
Saturday  64
Run Code Online (Sandbox Code Playgroud)

WeekOfMonth

First     256
Second    512
Third     1024
Fourth    2048
Run Code Online (Sandbox Code Playgroud)

例如,我有一个数字514,它是512(Second)+ 2(Monday)的总和.

如果我的号码只有514,我该如何获得Second&Monday?

Mar*_*age 6

假设以下定义:

[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
}
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码获取所需的字符串:

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);
Run Code Online (Sandbox Code Playgroud)

变量strSecond & Monday根据需要包含.

[Flags]如果您希望能够组合多个Days值或WeekOfMonth值,则该属性很重要.比如((Days) 3).ToString()将返回Sunday, Monday.如果您忘记了[Flags]返回的字符串的属性3.