Whole enum iteration

foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
    // ...
}

但是如何迭代按位枚举实例?
Suit mySuits = Suit.Hearts | Suit.Diamonds;
// How to now iterate mySuits, which should loop twice instead of four times?

最佳答案

假设 Suit 是一个没有重叠值的按位枚举,那么这就足够了:

var availableSuits = Enum.GetValues(typeof(Suit)).Cast<Enum>();
foreach (Suit suit in availableSuits.Where(mySuits.HasFlag)) {
    // ...
}

如果它需要快速,或者如果它需要忽略复合值或零值,那么您可能应该改为在 for 循环中检查 2 的连续幂并确定哪些值以这种方式匹配。

关于c# - 逐位枚举/标志实例枚举/迭代/foreach,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8055206/

10-16 07:27