我有一个枚举:
public enum SomeEnum
{
A = 2,
B = 4,
C = 8
D = 16
}
SomeEnum e1 = SomeEnum.A | SomeEnum.B
现在我想要一个枚举值列表,所以e1将是:
2, 4
所以我有:
List<int> list = new List<int>();
foreach(SomeEnum se in Enum.GetValues(typeof(SomeEnum)))
{
if(.....)
{
list.Add( (int)se );
}
}
我需要上面if语句的帮助。
更新
如何构建表示枚举e1
中设置的标志的整数列表?
答案 0 :(得分:4)
我怀疑你想要:
if ((e1 & se) != 0)
另一方面,使用Unconstrained Melody可以写:
foreach (SomeEnum se in Enums.GetValues<SomeEnum>())
{
if (se.HasAny(e1))
{
list.Add((int) se);
}
}
或使用LINQ:
List<int> list = Enums.GetValues<SomeEnum>()
.Where(se => se.HasAny(e1))
.Select(se => (int) se)
.ToList();
(如果您可以依次使用e1.GetFlags()
或其他东西来迭代每个位,那将会很好...会考虑另一个版本。)
答案 1 :(得分:3)
如果它在e1中,是否要添加值?
然后您可以在.NET 4中使用HasFlag方法。
if(e1.HasFlag(se))
{
list.Add( (int)se );
}
如果您不使用.net,则等效项为e1 & se == se
按照惯例,你应该用FlagsAttribute标记你的枚举,它应该是复数形式(SomeEnums)
答案 2 :(得分:0)
if((int)(e1 & se) > 0)
应该这样做
答案 3 :(得分:0)
这会起作用
if((int)se==(int)SomeEnum.A||(int)se==(int)SomeEnum.B )
{
list.Add( (int)se );
}