感谢您花时间尝试帮助我。HasFlag()总是在Enum的foreach语句中返回true
我遇到了一个相当奇怪的问题。我试图循环所有的枚举值来检查我的对象是否包含枚举标志。但由于某种原因,我不太明白,它说它总是有国旗。但在单独的if语句中,它确实按照我想要的方式工作。但我不想重复6次代码,所以我想让foreach语句工作。
有人知道发生了什么吗?也许一些背景信息为什么会发生?
对不起,我的英文不是我的母语。
在此先感谢!
代码是从原来的,但它本质上是相同的。
下面的代码。
[Flags]
public enum SampleEnum
{
Enum1 = 0,
Enum2 = 1,
Enum3 = 2,
Enum4 = 4,
Enum5 = 8,
Enum6 = 16,
};
SampleEnum sample = SampleEnum.Enum1 | SampleEnum.Enum2;
// This doesn't work
foreach (SampleEnum enum in Enum.GetValues(typeof(SampleEnum)))
{
// This is statement says it allways has the flags. Even tho it doesn't have the flag.
if(sample.HasFlag(enum))
{
// This is always true.
}
}
// This works
if (sample.HasFlag(SampleEnum.Enum2))
{
// true
}
// This works
if (sample.HasFlag(SampleEnum.Enum3))
{
// false
}
// This works
if (sample.HasFlag(SampleEnum.Enum4))
{
// false
}
}
如果你把'Enum.GetValues(typeof(MainSettings.ConnectedPrinters))。Cast()'是否工作呢? 'GetValues' returntype是非通用的'Array'。 –
在'.HasFlag'总是评估为true的循环中,printGroup的值是多少? – Edin