码迷,mamicode.com
首页 > Windows程序 > 详细

C#枚举

时间:2016-01-21 06:58:47      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:c# enum

关于C#的Enum(枚举),以前用过,老觉得有很多的坑。如果Enum中有2个值相同,则会出现一些问题:

1 , enum Platform : int

        EnumControl

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EnumTest.ainy
{
    /// <summary>
    /// 名字 = 值
    /// </summary>
   public enum Platform : int{
        Apple = 1,
        Android = 2,
        Windows = 3,
        MACOS = 4,
        WP = 3 // 此值与Windows的相同 , 在很多情况下只能取到“Windows” , 所以尽量不要取的相同
    }
    /// <summary>
    /// 对枚举类型的操作测试
    /// </summary>
    public class EnumControl
    {
        private static  EnumControl instance;
        public static EnumControl Instance
        {
            get {
                if (EnumControl.instance == null) {
                    EnumControl.instance = new EnumControl();
                }
                return EnumControl.instance
                ;}
            private set
            {
                EnumControl.instance = value
            ;} }
        private readonly Type enumType;
        public EnumControl()
        {
            this.enumType = typeof(Platform);
        }
        #region
        /// <summary>
        /// 通过值找到键值
        /// 《!important》:如value有多个,给出第一个
        /// 例如 : 如参数是3 , 则返回 Windows 而非WP
        /// </summary>
        /// <param name="i">值</param>
        /// <returns></returns>
        public string GetEnumKeyByValue(int i) 
        {
            return Enum.GetName(this.enumType, i);
        }
        /// <summary>
        /// 返回所有的键值
        /// </summary>
        /// <returns></returns>
        public string[] GetEnumKeys()
        {
            return Enum.GetNames(this.enumType);
        }
        #endregion
        #region
        /// <summary>
        /// 可以是键值可以是值 ,《!importan》 有重复的话 , 返回第一个
        /// </summary>
        /// <param name="key">WP/3</param>
        /// <returns></returns>
        public string GetEnumNameKeyByKeyOrValue(string key) {
            return Enum.Parse(this.enumType, key).ToString();
        }
        public int GetEnumValue(string key)
        {
            return Convert.ToInt32( Enum.Parse(this.enumType , key));
        }
        /// <summary>
        /// 得到所有的
        /// keys
        /// </summary>
        /// <returns></returns>
        public Array GetEnumValues()
        {
            return Enum.GetValues(this.enumType);
        }
        #endregion

        public Type GetEnumType()
        {
            Type t = Enum.GetUnderlyingType(this.enumType);
            return t;
        }

        public string getChineseName(Platform myEnum) {
            string bcStr = string.Empty;
            switch (myEnum) { 
                case Platform.Apple:
                    bcStr = "苹果";
                    break;
                case Platform.Android:
                    bcStr = "安卓";
                    break;
                case Platform.Windows:
                    bcStr = "微软";
                    break;
                case Platform.MACOS:
                    bcStr = "苹果PC";
                    break;
                //case Platform.WP:
                //    bcStr = "Window Phone";
                //    break;
                default:
                    break;
            }

            return bcStr;
        }
        public int getValus(Platform myEnum)
        {
            int bcInt = (int)myEnum;
            return bcInt;
        }
    }
}

测试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EnumTest.ainy;

namespace EnumTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("----{0}", EnumControl.Instance.GetEnumKeyByValue(3));
            Console.WriteLine("_________________________________________________");
            foreach (var a in EnumControl.Instance.GetEnumKeys()) {
                Console.WriteLine("Array --- {0}", a);
            }
            Console.WriteLine("_________________________________________________");
            Console.WriteLine("4-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("4"));
            Console.WriteLine("3-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("3"));
            Console.WriteLine("5-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("5"));
            Console.WriteLine("WP-----{0}", EnumControl.Instance.GetEnumNameKeyByKeyOrValue("WP"));
            Console.WriteLine("_________________________________________________");
            Console.WriteLine("Apple-----{0}", EnumControl.Instance.GetEnumValue("Apple"));
            //没有意义
            //Console.WriteLine("-----{0}", EnumControl.Instance.GetEnumValue("2"));
            Console.WriteLine("_________________________________________________");
            foreach (var a in EnumControl.Instance.GetEnumValues()) {
                Console.WriteLine("Array --- {0}", a);
            }
            Console.WriteLine("_________________________________________________");
            Console.WriteLine("BaseType-----{0}", EnumControl.Instance.GetEnumType());
            Console.WriteLine("_________________________________________________");
            Console.WriteLine("ChineseName-----{0}", EnumControl.Instance.getChineseName( Platform.WP ));
            Console.WriteLine("_________________________________________________");
            Console.WriteLine(" Platform.Windows Value-----{0}", EnumControl.Instance.getValus(Platform.Windows));
            Console.WriteLine(" Platform.WP Value-----{0}", EnumControl.Instance.getValus(Platform.WP));
            Console.ReadKey();
        }
    }
}

结果:

技术分享

因为:Windows和WP的值都为3 , 有的时候只能取到Windows  (通过 3 或者 WP找的时候)

看这个,根本就编辑不过:

技术分享


本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1736973

C#枚举

标签:c# enum

原文地址:http://aonaufly.blog.51cto.com/3554853/1736973

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!