天天看點

c# 枚舉 enum 類型

c# 枚舉 enum 類型 ([email protected])

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 [email protected]

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 [email protected]

//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 [email protected])

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 [email protected]

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;

}

c# 枚舉 enum 類型 ([email protected])

轉載于:https://www.cnblogs.com/IS2120/archive/2012/02/16/6745943.html

c#