博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 枚举 enum 类型
阅读量:4578 次
发布时间:2019-06-08

本文共 3299 字,大约阅读时间需要 10 分钟。

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@CSDN
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@csdn
//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@CSDN)
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@CSDN
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;
}

转载于:https://www.cnblogs.com/IS2120/archive/2012/02/16/6745943.html

你可能感兴趣的文章
mongodb
查看>>
LeetCode 46. Permutations
查看>>
jmeter- 性能测试3:聚合报告(Aggregate Report )
查看>>
JavaScript高级程序设计---学习笔记(二)
查看>>
vim 插件的学习
查看>>
Uncaught SyntaxError: Unexpected token ILLEGAL
查看>>
一个预处理定义的问题
查看>>
神经网路-SGD-1
查看>>
安卓冷知识:LayoutParams
查看>>
JAVA操作mysql(如何更加面向对象的操作数据库)
查看>>
Python9-事件及队列-day37
查看>>
团队作业3
查看>>
2.5.2 优先队列
查看>>
Linux下配置c/c++编译环境-Emacs-转载博客园
查看>>
Jmeter将HTTP request报文体中的字符串转换为大写
查看>>
UVa 11572 - Unique Snowflakes (set+滑动窗口思想)
查看>>
UVA 10954 Add All (优先队列的妙用)
查看>>
【转帖】const 与 readonly 的区别
查看>>
POJ -1679(次小生成树)模板
查看>>
hdu 3172 Virtual Friends
查看>>