There are times when an enumerated type is preferred over using the raw data type.  An example of using a scheme is when we need to check the health of x-ray gauges in use on a production line.  Rather than using a scheme like 0, 1 and 2, we can use an enumerated type:        1:   /// <summary>
     2:   /// POR Healthy status indicator
     3:   /// </summary>
     4:   /// <remarks>The healthy status is for each POR x-ray gauge; each has its own status.</remarks>
     5:   [Flags]
     6:   public enum POR_HEALTH : short
     7:   {
     8:        /// <summary>
     9:        /// POR1 healthy status indicator
    10:        /// </summary>
    11:         POR1 = 0,        
    12:         /// <summary>
    13:         /// POR2 healthy status indicator
    14:         /// </summary>
    15:         POR2 = 1,        
    16:         /// <summary>
    17:         /// Both POR1 and POR2 healthy status indicator
    18:         /// </summary>
    19:         BOTH = 2         
    20:   }
By using the [Flags] attribute, we are treating the enumerated type as a bit mask.  We can then use bitwise operations such as AND, OR, NOT etc. .
Now, when we want to check the health of a specific gauge, we would rather use the name of the gauge than the numeric identity; it makes for better reading and programming practice.
To translate the numeric identity to the enumerated value, we use the Parse method of Enum class:
POR_HEALTH GaugeHealth = (POR_HEALTH) Enum.Parse(typeof(POR_HEALTH), XrayMsg.Gauge_ID.ToString());
The Parse method creates an instance of the enumerated type.  
Now, we can use the name of the gauge rather than the numeric identity:
     1:  if (GaugeHealth == POR_HEALTH.POR1 || GaugeHealth == POR_HEALTH.BOTH)
     2:  {
     3:         XrayHealthyTag.Name = Properties.Settings.Default.POR1XRayHealthyTag;
     4:  }
     5:  else if (GaugeHealth == POR_HEALTH.POR2)
     6:  {
     7:         XrayHealthyTag.Name = Properties.Settings.Default.POR2XRayHealthyTag;
     8:  }