感謝您花時間嘗試幫助我。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