Спасибо, что нашли время, чтобы попробовать помочь мне.HasFlag() всегда возвращает true в заявлении Enum foreach
Я столкнулся с довольно странной проблемой. Я пытаюсь просмотреть все значения Enum, чтобы проверить, содержит ли мой объект флаг Enum. Но по какой-то причине, что я не совсем понимаю, в предсказании говорится, что у него всегда есть флаг. Но в отдельных операторах 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 является не общим «массивом». –
Какова ценность printGroup в цикле, где '.HasFlag' всегда принимает значение true? – Edin