c# 枚举 enum 类型 (IS2120
 1. 最平常的方法
public enum Suits
 {
         Spades,
         Hearts,
         Clubs,
         Diamonds,
         NumSuits
 }

public void PrintAllSuits()
 {
         foreach(string name in Enum.GetNames(typeof(Suits)))
         {
                 System.Console.WriteLine(suit);
         }
 }
//z 2012-2-16 17:49:28 PM IS2120
2. 扩展方法(更通用,更方便一些)
public static class EnumExtensions
 {
     /// <summary>
     /// Gets all items for an enum value.
     /// </summary>
     /// <typeparam name="T"></typeparam>
     /// <param name="value">The value.</param>
     /// <returns></returns>
     public static IEnumerable<T> GetAllItems<T>(this Enum value)
     {
         foreach (object item in Enum.GetValues(typeof(T)))
         {
             yield return (T)item;
         }
     }

     /// <summary>
     /// Gets all items for an enum type.
     /// </summary>
     /// <typeparam name="T"></typeparam>
     /// <param name="value">The value.</param>
     /// <returns></returns>
     public static IEnumerable<T> GetAllItems<T>() where T : struct
     {
         foreach (object item in Enum.GetValues(typeof(T)))
         {
             yield return (T)item;
         }
     }

     /// <summary>
     /// Gets all combined items from an enum value.
     /// </summary>
     /// <typeparam name="T"></typeparam>
     /// <param name="value">The value.</param>
     /// <returns></returns>
     /// <example>
     /// Displays ValueA and ValueB.
     /// <code>
     /// EnumExample dummy = EnumExample.Combi;
     /// foreach (var item in dummy.GetAllSelectedItems<EnumExample>())
     /// {
     ///    Console.WriteLine(item);
     /// }
     /// </code>
     /// </example>
     public static IEnumerable<T> GetAllSelectedItems<T>(this Enum value)
     {
         int valueAsInt = Convert.ToInt32(value, CultureInfo.InvariantCulture);

         foreach (object item in Enum.GetValues(typeof(T)))
         {
             int itemAsInt = Convert.ToInt32(item, CultureInfo.InvariantCulture);

             if (itemAsInt == (valueAsInt & itemAsInt))
             {
                 yield return (T)item;
             }
         }
     }

     /// <summary>
     /// Determines whether the enum value contains a specific value.
     /// </summary>
     /// <param name="value">The value.</param>
     /// <param name="request">The request.</param>
     /// <returns>
     ///     <c>true</c> if value contains the specified value; otherwise, <c>false</c>.
     /// </returns>
     /// <example>
     /// <code>
     /// EnumExample dummy = EnumExample.Combi;
     /// if (dummy.Contains<EnumExample>(EnumExample.ValueA))
     /// {
     ///     Console.WriteLine("dummy contains EnumExample.ValueA");
     /// }
     /// </code>
     /// </example>
     public static bool Contains<T>(this Enum value, T request)
     {
         int valueAsInt = Convert.ToInt32(value, CultureInfo.InvariantCulture);
         int requestAsInt = Convert.ToInt32(request, CultureInfo.InvariantCulture);

         if (requestAsInt == (valueAsInt & requestAsInt))
         {
             return true;
         }

         return false;
     }
 }

//z 2012-2-16 17:51:39 PM is2120
//z The enum itself must be decorated with the FlagsAttribute
 [Flags]
public enum EnumExample
 {
     ValueA = 1,
     ValueB = 2,
     ValueC = 4,
     ValueD = 8,
     Combi = ValueA | ValueB
 }

3. 在compact framework中不支持 Enum.GetValues(//z 2012-2-16 17:47:28 PM IS2120
 The .NET compact framework does not support Enum.GetValues. Here's a good workaround from Ideas 2.0: Enum.GetValues in Compact Framework:
//z 2012-2-16 17:49:28 PM IS2120@N
public IEnumerable<Enum> GetValues(Enum enumeration)
 {
    List<Enum> enumerations = new List<Enum>();
    foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(
          BindingFlags.Static | BindingFlags.Public))
    {
       enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
    }
    return enumerations;
 }