
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Determining if One or More Enumeration Flags Are Set
|
31
{
// lang contains at least Language.CSharp and Language.VBNET.
}
To determine if a variable exclusively contains a set of bit flags that are all set, use the
following conditional:
if((lang | (Language.CSharp | Language.VBNET)) ==
(Language.CSharp | Language.VBNET))
{
// lang contains only the Language.CSharp and Language.VBNET.
}
Discussion
When enumerations are used as bit flags and are marked with the Flags attribute,
they usually will require some kind of conditional testing to be performed. This test-
ing necessitates the use of the bitwise AND (
&) and OR (|) operators.
Testing for a variable having a specific bit flag set is done with the following condi-
tional statement:
if((lang & Language.CSharp) == Language.CSharp)
where lang is of the Language enumeration type.
The
& operator is used with a bit mask to determine if a bit is set to 1. The result of
ANDing two bits is
1 only when both bits are 1; otherwise, the result is 0. You can
use this operation to determine if a specific bit flag is set to a
1 in the number con-
taining the individual bit flags. If you AND the variable
lang with the specific bit flag
you are testing for (in this case
Language.CSharp), you can extract that single specific
bit flag. The expression
(lang &