C#在Dictionary中使用枚举作为键
2016-06-21 21:21
1146 查看
Enum类型没有实现IEquatable接口,Dictionary中使用Enum作为键时,将发生装箱,使效率降低。
此时可用Dictionary中一个接收IEqualityComparer<T>类型的重载版本来避免对枚举的装箱操作。
先定义一个泛型的比较器实现IEqualityComparer<T>。
使用T类型的枚举作为键时,只需在构造函数中传入一个EnumComparer<T>实例即可。
参考资料:http://wayfarer.blog.51cto.com/1300239/280088
此时可用Dictionary中一个接收IEqualityComparer<T>类型的重载版本来避免对枚举的装箱操作。
先定义一个泛型的比较器实现IEqualityComparer<T>。
public class EnumComparer<T> : IEqualityComparer<T> where T : struct { #region IEqualityComparer<T> 泛型接口实现 public bool Equals(T first, T second) { var firstParam = Expression.Parameter(typeof(T), "first"); var secondParam = Expression.Parameter(typeof(T), "second"); var equalExpression = Expression.Equal(firstParam, secondParam); return Expression.Lambda<Func<T, T, bool>> (equalExpression, firstParam, secondParam). 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, parameter). Compile().Invoke(instance); } #endregion }
使用T类型的枚举作为键时,只需在构造函数中传入一个EnumComparer<T>实例即可。
参考资料:http://wayfarer.blog.51cto.com/1300239/280088
相关文章推荐
- C# 字典 Dictionary 遍历
- C# 对文本文件的几种读写方法总结
- ``` > **c#学习(一)** ```
- 登山-C#-获得年份月份,检验TextBox输入的是否为数字,将字符串转数字控制小数点精度,ComboBox DropDownList形式下设置初始值
- [程序猿的表白之路]花瓣与表白齐飞&照片与文字共鸣
- C#基础-->cookie和session
- C#语言特性备忘
- C#学习笔记 ODBC 操作CSV
- C#使用SnmpSharpNet接收snmp的trap消息示例代码
- C#简易线性表实现。
- C# 合并及拆分PDF文件
- C# 合并及拆分PDF文件
- C#中System.DateTime.Now.ToString()用法
- C#取得站点跟目录
- C# list sort 排序
- C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件
- C#实现断点续传
- C#创建文件夹
- C#下的两种加密方式MD5和DEC
- C# winForm启动最小化到任务栏右侧通知栏并交互操作