Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

FlagsAttribute Constructor

Initializes a new instance of the FlagsAttribute class.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

public FlagsAttribute()

The following example defines a PhoneService enumeration that represents forms of communication provided by a telephone company. It initializes three variables representing the service provided to three different households, and then indicates which households have no service, which households have only cell phone service, and which households have both cell phone and land line service. Finally, it implicitly calls the Enum.ToString(String) method to display the types of service provided to each household.

using System;

[FlagsAttribute] public enum PhoneService
{
   None = 0,
   LandLine = 1,
   Cell = 2,
   Fax = 4,
   Internet = 8,
   Other = 16
}

public class Example
{
   public static void Main()
   {
      // Define three variables representing the types of phone service 
      // in three households. 
      var household1 = PhoneService.LandLine | PhoneService.Cell |
                       PhoneService.Internet;
      var household2 = PhoneService.None;
      var household3 = PhoneService.Cell | PhoneService.Internet;

      // Store the variables in an array for ease of access.
      PhoneService[] households = { household1, household2, household3 };

      // Which households have no service? 
      for (int ctr = 0; ctr < households.Length; ctr++)
         Console.WriteLine("Household {0} has phone service: {1}",
                           ctr + 1,
                           households[ctr] == PhoneService.None ?
                               "No" : "Yes");
      Console.WriteLine();

      // Which households have cell phone service? 
      for (int ctr = 0; ctr < households.Length; ctr++)
         Console.WriteLine("Household {0} has cell phone service: {1}",
                           ctr + 1,
                           (households[ctr] & PhoneService.Cell) == PhoneService.Cell ?
                              "Yes" : "No");
      Console.WriteLine();

      // Which households have cell phones and land lines? 
      var cellAndLand = PhoneService.Cell | PhoneService.LandLine;
      for (int ctr = 0; ctr < households.Length; ctr++)
         Console.WriteLine("Household {0} has cell and land line service: {1}",
                           ctr + 1,
                           (households[ctr] & cellAndLand) == cellAndLand ?
                              "Yes" : "No");
      Console.WriteLine();

      // List all types of service of each household?// 
      for (int ctr = 0; ctr < households.Length; ctr++)
         Console.WriteLine("Household {0} has: {1:G}",
                           ctr + 1, households[ctr]);
      Console.WriteLine();
   }
}
// The example displays the following output: 
//    Household 1 has phone service: Yes 
//    Household 2 has phone service: No 
//    Household 3 has phone service: Yes 
// 
//    Household 1 has cell phone service: Yes 
//    Household 2 has cell phone service: No 
//    Household 3 has cell phone service: Yes 
// 
//    Household 1 has cell and land line service: Yes 
//    Household 2 has cell and land line service: No 
//    Household 3 has cell and land line service: No 
// 
//    Household 1 has: LandLine, Cell, Internet 
//    Household 2 has: None 
//    Household 3 has: Cell, Internet

The following example illustrates the use of the FlagsAttribute attribute and shows the effect on the ToString method of using FlagsAttribute on an Enum declaration.

using System;

class Example
{
   // Define an Enum without FlagsAttribute. 
   enum SingleHue : short
   {
      None = 0,
      Black = 1,
      Red = 2,
      Green = 4,
      Blue = 8
   };

   // Define an Enum with FlagsAttribute.
   [FlagsAttribute] 
   enum MultiHue : short
   {
      None = 0,
      Black = 1,
      Red = 2,
      Green = 4,
      Blue = 8
   };

   static void Main( )
   {
      // Display all possible combinations of values.
      Console.WriteLine( 
           "All possible combinations of values without FlagsAttribute:");
      for(int val = 0; val <= 16; val++ )
         Console.WriteLine( "{0,3} - {1:G}", val, (SingleHue)val);

      // Display all combinations of values, and invalid values.
      Console.WriteLine( 
           "\nAll possible combinations of values with FlagsAttribute:");
      for( int val = 0; val <= 16; val++ )
         Console.WriteLine( "{0,3} - {1:G}", val, (MultiHue)val);
   } 
} 
// The example displays the following output: 
//       All possible combinations of values without FlagsAttribute: 
//         0 - None 
//         1 - Black 
//         2 - Red 
//         3 - 3 
//         4 - Green 
//         5 - 5 
//         6 - 6 
//         7 - 7 
//         8 - Blue 
//         9 - 9 
//        10 - 10 
//        11 - 11 
//        12 - 12 
//        13 - 13 
//        14 - 14 
//        15 - 15 
//        16 - 16 
//        
//       All possible combinations of values with FlagsAttribute: 
//         0 - None 
//         1 - Black 
//         2 - Red 
//         3 - Black, Red 
//         4 - Green 
//         5 - Black, Green 
//         6 - Red, Green 
//         7 - Black, Red, Green 
//         8 - Blue 
//         9 - Black, Blue 
//        10 - Red, Blue 
//        11 - Black, Red, Blue 
//        12 - Green, Blue 
//        13 - Black, Green, Blue 
//        14 - Red, Green, Blue 
//        15 - Black, Red, Green, Blue 
//        16 - 16

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Portable Class Library

Supported in: Portable Class Library
Show:
© 2015 Microsoft