Cel*_*Cel 3 .net c# linq foreach enums
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
Suit mySuits = Suit.Hearts | Suit.Diamonds;
// How to now iterate mySuits, which should loop twice instead of four times?
Run Code Online (Sandbox Code Playgroud)
假设Suit
是一个没有重叠值的按位枚举,那么这就足够了:
var availableSuits = Enum.GetValues(typeof(Suit)).Cast<Enum>();
foreach (Suit suit in availableSuits.Where(mySuits.HasFlag)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果需要快速,或者需要忽略复合值或零值,则应该在for
循环中检查两个连续的幂,并确定哪个值与该方式匹配.