C#开发WinForm之枚举

C#开发WinForm之枚举

前言

几乎高级语言都有枚举,枚举值是int,值从0开始,如果我们想给枚举赋个字符串呢,用枚举值表示字符串怎么做到?

基本情况

常见枚举
enum Colors { Red, Green, Blue, Yellow };
可以取到如下值

Enum转字符串

string valueStr = Colors.Red.ToString();//值为Red

Enum转int

int value = (int)Colors.Red;

字符串转Enum

(Colors)Enum.Parse(typeof(Colors), "Red")

int转Enum

  1. 可以强制转换将整型转换成枚举类型。

    例如:Colors color = (Colors)2 ,那么color即为Colors.Blue

  2. 利用Enum的静态方法ToObject。

    public static Object ToObject(Type enumType,int value)

    例如:Colors color = (Colors)Enum.ToObject(typeof(Colors), 2),那么color即为Colors.Blue

判断某个整型是否定义在枚举中

public static bool IsDefined(Type enumType,Object value)

例如:Enum.IsDefined(typeof(Colors), n))

自定义返回字符串

如果我想通过Red枚举获得红色值怎么办
新建RemarkAttribute.cs

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

namespace DongliCAD.dyEnum
{
    public class RemarkAttribute : Attribute
    {
        public RemarkAttribute(string remark)
        {
            this.Remark = remark;
        }
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }
    }
}

新建EnumExtension.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace DongliCAD.dyEnum
{
    /// <summary>
    /// 枚举扩展类
    /// string style = EnumExtension.GetRemark(MongoLogicOp.style);取备注
    ///int style = (int)MongoLogicOp.style;取int值
    ///string style = MongoLogicOp.style.ToString();//取字符串,返回的字符串和属性名一样
    /// 
    /// 
    /// </summary>
    public static class EnumExtension
    {
        /// <summary>
        /// 获取枚举的备注信息
        /// </summary>
        /// <param name="em"></param>
        /// <returns></returns>
        public static string GetRemark(this Enum em)
        {
            Type type = em.GetType();
            FieldInfo fd = type.GetField(em.ToString());
            if (fd == null)
                return string.Empty;
            object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
            string name = string.Empty;
            foreach (RemarkAttribute attr in attrs)
            {
                name = attr.Remark;
            }
            return name;
        }

        /// <summary>
        /// 获取备注信息对应的枚举值
        /// </summary>
        /// <param name="remark"></param>
        /// <returns></returns>
        public static string ByRemark<T>(this string remark)
        {
            Type type = typeof(T);
            FieldInfo[] fds = type.GetFields();
            foreach (var fd in fds)
            {
                object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
                foreach (RemarkAttribute attr in attrs)
                {
                    var name = attr.Remark;
                    if (name == remark)
                        return fd.Name;
                }
            }
            return null;
        }
    }
}

枚举定义如下

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

namespace DongliCAD.dyEnum
{
    enum Colors
    {
        [Remark("红色")]
        Red,
        [Remark("绿色")]
        Green,
        [Remark("蓝色")]
        Blue,
         [Remark("黄色")]
        Yellow
    }
}

其中[Remark(“红色”)]是在RemarkAttribute.cs里定义的。

红色:EnumExtension.GetRemark(Colors.Red);
黄色:EnumExtension.GetRemark(Colors.Yellow);

扩展

枚举Colors遍历

 private static void Main(string[] args)
 {
        foreach (Colors color in Enum.GetValues(typeof(Colors)))
        {
             int value = (int)color;//0,1,2,3
             int valueName = color.ToString();//Red,Green,Blue,Yellow
              int remakr = EnumExtension.GetRemark(color);//红色,绿色,黄色,黄色
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值