C#自定义枚举类的实现

本文介绍了如何在C#中创建自定义枚举类,以解决枚举在使用时需要中文显示的问题。通过一个扑克牌花色的例子,展示了如何创建一个带有中文名称的枚举类,包括枚举值、中文名属性以及类型转换方法,便于在UI控件中绑定和使用。这种方法使得枚举更加灵活,同时保持了类型安全。

 一个最简单的枚举类

public enum sex

{

male=0,

female=1

}

然而使用或绑定时需要中文,解决办法有以下几种:

1.

public enum sex

{

男人=0,

女人=1

}

2.(参考他人)

public   enum   SexEnum:int 
{ 
men   =   0, 
women 

private   string   GetSexEnumCnName(SexEnum   sex) 
{ 
      const   string[]   sNames   =   new   string[2]{ "男 ", "女 "}; 
      return   sNames[(int)sex]; 
}

3.直接在用的时候写个switch方法

但个人感觉都不是很好,所以结合网上资料,写了个扑克花色的自定义枚举类:

//public enum EnumCardMark
    //{
    //    Heart = 1,//红桃
    //    Diamond = 2,//方块
    //    Spade=3,//黑桃
    //    Clubs=4//草花
    //}

    public class EnumCardMark
    {
        private int _Enum_Value;
        public int Enum_Value
        {
            get { return _Enum_Value; }
        }

        private string _Enum_Name;
        public string Enum_Name
        {
            get { return _Enum_Name; }
        }

        private EnumCardMark(int value, string name)
        {
            _Enum_Value = value;
            _Enum_Name = name;
        }

        public static readonly EnumCardMark NoMark = new EnumCardMark(0, string.Empty);
        public static readonly EnumCardMark Heart = new EnumCardMark(1, "红桃");
        public static readonly EnumCardMark Diamond = new EnumCardMark(2, "方块");
        public static readonly EnumCardMark Spade = new EnumCardMark(3, "黑桃");
        public static readonly EnumCardMark Clubs = new EnumCardMark(4, "草花");

        public static List<EnumCardMark> EnumCardMarkList = new List<EnumCardMark> { EnumCardMark.Heart, EnumCardMark.Diamond, EnumCardMark.Spade, EnumCardMark.Clubs };

        public static explicit operator EnumCardMark(int value)
        {
            switch (value)
            {
                case 1:
                    return Heart;
                case 2:
                    return Diamond;
                case 3:
                    return Spade;
                case 4:
                    return Clubs;
                default:
                    return new EnumCardMark(value,value.ToString());
            }
        }

        public static explicit operator int(EnumCardMark value)
        {
            return value.Enum_Value;
        }

        public EnumCardMark Copy()
        {
            return new EnumCardMark(Enum_Value, Enum_Name);
        }
    }

 

这样用起来的时候非常方便,要绑定到combobox或dropdownlist等控件的时候直接绑定到List,也实现了枚举的类型转换,并且多了中文属性。个人还是比较倾向这种写法的。

只是要注意的是.net 自带的枚举是值类型而这时是引用,不过使用起来没影响,因为这个类内属性不能被赋值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值