I have a set of five boolean values. If more than one of these are true I want to excecute a particular function. What is the most elegant way you can think of that would allow me to check this condition in a single if() statement? Target language is C# but I’m interested in solutions in other languages as well (as long as we’re not talking about specific built-in functions).
One interesting option is to store the booleans in a byte, do a right shift and compare with the original byte. Something like if(myByte && (myByte >> 1)) But this would require converting the separate booleans to a byte (via a bitArray?) and that seems a bit (pun intended) clumsy… [edit]Sorry, that should have been if(myByte & (myByte - 1)) [/edit]
Note: This is of course very close to the classical ‘population count’, ‘sideways addition’ or ‘Hamming weight’ programming problem – but not quite the same. I don’t need to know how many of the bits are set, only if it is more than one. My hope is that there is a much simpler way to accomplish this.
How about
or a generalized method would be…
or using LINQ as suggested by other answers:
EDIT (to add Joel Coehoorn suggestion: (in .Net 2.x and later)
or in .Net 3.5 and later:
or as an extension to
IEnumerable<bool>usage would then be: