各位在C#中的Enum 是否只能实现标识枚举?
见如下代码
public enum myEnum
{
     CAT = 0
    ,DOG = 1
}
当我 使用 枚举中的标识时 如 CAT , DOG 时,很方便
当我需要 获得 Enum 的内容如 0 , 1 时 却, 很困难.并且, C# 中也不能像java一样, 在Enum中编写方法, 返回内容.

解决方案 »

  1.   


    public enum myEnum : byte//限制长度为1字节
    {
         CAT = 0
        ,DOG = 1
    }
    byte be = (byte)myEnum.CAT;
      

  2.   

    为啥要这样呢?本身这样的想法就是不对的。实在要用到枚举的值,建议改用如下的形式        public static class myEnum
            {
                public const int CAT = 0;
                public const int DOG = 1;
            }
      

  3.   

    我看到java中 , 可以在 enum中实现 toString方法为什么 在C# 中就不可以呢?是否, 我没有找到?
      

  4.   

    enum默认继承于int 这是内置的,除非你 显式的将其改变 比如 :byte 或 :long等,转换就是直接转换就行了,这还不方便要怎样才方便呢? 例如,
    int i=(int)myEnum.CAT;
      

  5.   

    public enum myEnum
    {
         CAT = 0
        ,DOG = 1
    }得到myEnum.CAT的枚举值:
    int index=myEnum.CAT.GetHashCode();
      

  6.   

    当我需要 获得 Enum 的内容如 0 , 1 时 却, 很困难.
    -----------
    不困难...enum重写了ToString方法所以输出的是Name,你要值就强制转换好了,不麻烦啊...并且, C# 中也不能像java一样, 在Enum中编写方法, 返回内容.
    -----------
    C# 3.0以上能通过扩展方法给enum添加新方法,实际上扩展方法可以给任意现有类型添加新方法...
      

  7.   

    再次提醒楼主,使用enum的值是恶习!不值得提倡,能改就改掉。万一将来Enum的数值改变了,楼主打算如何处理?
      

  8.   

    使用enum并不是一个恶习!只不过 enum一般是用来状态判断,不是引用其值! 
      

  9.   

            [Flags]
            public enum TestEnum:byte
            {
                a = 0,
                b = 1,
                c = 2,
                d = 4,
                e = 8
            }
    //===========================================            //枚举,通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。但是,还可以将枚举
                //嵌套在类或结构中。
                //------------------------------------------------------------------------------------------------------------
                //Enum.IsDefined(Type enumType,Object value)  返回指定枚举中是否存在具有指定值的常数的指示。 value 为enumType的常数的值或名称。
                Console.WriteLine(Enum.IsDefined(typeof(TestEnum), "e"));       //True   value 为常数的名称。
                Console.WriteLine(Enum.IsDefined(typeof(TestEnum), (byte)8));   //True   value 为常数的值。 注:必须为基础类型 Byte
                Console.WriteLine(Enum.IsDefined(typeof(TestEnum), (byte)9));   //False  value 为常数的值。            Console.WriteLine(Enum.GetName(typeof(TestEnum), (byte)8));     //e
                Console.WriteLine(Enum.GetUnderlyingType(typeof(TestEnum)));    //System.Byte
                //------------------------------------------------------------------------------------------------------------
                //((Type)Value).ToString()   (常用于列举枚举常数组合值(Flag))
            
                for (int i = 0; i < 20; i++)
                {
                    Console.WriteLine("{0}:{1}", i, ((TestEnum)i).ToString());
                    //TestEnum te = TestEnum.b; Console.WriteLine(te.ToString());
                }
                //-----------------------------------------------------------------------------------------------------------
                foreach (Environment.SpecialFolder folder in Enum.GetValues(typeof(Environment.SpecialFolder)))
                {
                    //Console.Write("{0,23}  ", folder);
                    Console.Write(folder.ToString().PadRight(23, ' '));
                    Console.WriteLine(Environment.GetFolderPath(folder));
                }
                //------------------------------------------------------------------------------------------------------------
                foreach (string St in Enum.GetNames(typeof(Environment.SpecialFolder)))
                {
                    Console.Write(St.PadRight(23, ' '));
                    Console.WriteLine((int)Enum.Parse(typeof(Environment.SpecialFolder), St));
                }
                //------------------------------------------------------------------------------------------------------------
                //Enum.Parse将 "一个或多个枚举常数的名称或数字值的字符串" 表示转换成等效的枚举对象。
                TestEnum Te1 = (TestEnum)Enum.Parse(typeof(TestEnum), "b,C,d", true);      //Dot Forget :(TestEnum)
                TestEnum Te2 = (TestEnum)Enum.Parse(typeof(TestEnum), "7", true);            Console.WriteLine("{0}---{1}", Te1.ToString(), (byte)Te1);  //b, c, d---7
                Console.WriteLine("{0}---{1}", Te2.ToString(), (byte)Te2);  //b, c, d---7
                //------------------------------------------------------------------------------------------------------------
                TestEnum Te3 = TestEnum.b;
                Console.WriteLine(Enum.Format(typeof(TestEnum), Te3, "d")); //1  十进制
                Console.WriteLine(Enum.Format(typeof(TestEnum), Te3, "x")); //01 十六进制 (不带前导“0x”)            Console.WriteLine(Enum.Format(typeof(TestEnum), 8, "g"));   //e  如果 value 等于某个已命名的枚举常数,则返回该常数的名称;否
                Console.WriteLine(Enum.Format(typeof(TestEnum), 9, "g"));   //9                                       则返回 value 的等效十进制数。 
                //------------------------------------------------------------------------------------------------------------
      

  10.   

    public enum myEnum
    {
         CAT = 3 ,DOG = 5,COW=7
    }你可以枚举常数的值给与指定,如上
    也可以默认,如:
    public enum myEnum
    {
         CAT  ,DOG ,COW
    }
    默认值从0开始,并递增。
    得到ENUM的常数的值:
                myEnum me = myEnum.DOG;
                Console.WriteLine(" 值为:" + (int)me);// 值为:1
      

  11.   


    我是说楼主使用enum的 值 是恶习。合理使用enum是个好习惯
      

  12.   

    int型枚举 GetHashCode就行了
      

  13.   

    感谢 liqiang427
    tangmac
    与 kinghongchen已给分