Dictory添加Enum值作为Key

  • Enum类型没有实现IEquatable接口,Dictionary中无法添加Enum类型的元素。
    通过实现Enum的IEquatable接口,便可以将enum类型作为key 添加到dictionary中

代码示例与应用

using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace testExample
{
   //实现IEqualityComparer接口
    public class EnumComparer<T> : IEqualityComparer<T> where T : struct
    {
        public bool Equals(T first, T second)
        {
            var firstPara = Expression.Parameter(typeof(T), "first");
            var secondPara = Expression.Parameter(typeof(T), "second");
            var equalExpression = Expression.Equal(firstPara, secondPara);

            return Expression.Lambda<Func<T, T, bool>>(equalExpression, new[] { firstPara, secondPara }).Compile().Invoke(first, second);
        }
        public int GetHashCode(T instance)
        {
            var parameter = Expression.Parameter(typeof(T), "instance");
            var convertExpression = Expression.Convert(parameter, typeof(int));

            return Expression.Lambda<Func<T, int>>(convertExpression, new[] { parameter }).Compile().Invoke(instance);
        }
    }

    public enum EAlarmType : uint
    {
        Null = 0,
        Common = 1,
        Warn = 2,
        Serious = 3,
    }
    public enum MsgDetails : uint
    {
        Null = 0,
        PLC_Error = 1, 
        GPIO_Error = 2, 
        PC_PowerOff = 3,
        Reader_Error = 4 
    }
    class Program
    {
        static void Main(string[] args)
        {
            var dicT = new Dictionary<MsgDetails, EAlarmType>(new EnumComparer<MsgDetails>());
            dicT.Add(MsgDetails.GPIO_Error, EAlarmType.Common);
            dicT.Add(MsgDetails.PC_PowerOff, EAlarmType.Serious);
            dicT.Add(MsgDetails.PLC_Error, EAlarmType.Common);

            foreach (KeyValuePair<MsgDetails,EAlarmType> pair in dicT) 
            {
                Console.WriteLine("key:{0}--value:{1}", pair.Key, pair.Value);
            }
            Console.ReadLine();
        }
    }
}

输出:
key:GPIO_Error–value:Common
key:PC_PowerOff–value:Serious
key:PLC_Error–value:Common

参考:https://blog.51cto.com/wayfarer/280088
codeProject

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值