假设我有以下枚举
[Flags]
enum Options
{
Option1 = 1 << 0,
Option2 = 1 << 1,
Option3 = 1 << 2
}
我要设置一个变量如下
var options = 0;
options |= Options.Option1;
options |= Options.Option3;
// now options should equal Option1 + Option3
// I then store that single value in the database
myDatabase.Options.Submit(options);
如何解析“选项”以获取原始值?
public List<Options> ParseOptions(Options options)
{
// Not sure how to parse the options.
}
答案 0 :(得分:6)
您可以使用Enum.HasFlag()
方法查看是否设置了特定标志。如果已设置,只需完成所有单个值测试。
var value = Options.Option1 | Options.Option3;
foreach (Options flag in Enum.GetValues(typeof(Options)))
{
if (value.HasFlag(flag))
{
// do something with the flag
}
}
请注意,HasFlag()
方法已添加到.NET 4.但它在逻辑上等同于此:
public static bool HasFlag(this Enum value, Enum flag)
{
return (value & flag) == flag;
}
答案 1 :(得分:1)
类似的东西:
public List<Options> ParseOptions(Options options)
{
var list = new List<Options>();
foreach(MyEnum val in Enum.GetValues(typeof(myEnum)))
{
if ((val & options) == val)
List.Add(val);
}
return list;
}
(未在Visual Studio中验证)