C#中自定义enum,然后将其作为Dictionary的Key,通常的做法如下:
using System; using System.Text; using System.Collections.Generic; namespace ConsoleApplication1 { enum ClothType { Hair, Coat, Shoes, } class Cloth { } class Program { static void Main(string[] args) { Dictionary<ClothType, Cloth> dicCloth = new Dictionary<ClothType, Cloth>(); dicCloth.Add(ClothType.Coat, new Cloth()); Console.ReadKey(); } } }
但是这样在调用Add方法的时候,会间接地造成封箱操作,这样就带来了不必要的性能消耗。当然了,不只是Add方法。
下面的方法可以解决该问题:
using System; using System.Text; using System.Collections.Generic; using System.Collections; namespace ConsoleApplication1 { enum ClothType { Hair, Coat, Shoes, } //新加比较器类 class ClothTypeEnumComparer : IEqualityComparer<ClothType> { public bool Equals(ClothType x, ClothType y) { return x == y; //x.Equals(y); 注意这里不要使用Equals方法,因为也会造成封箱操作 } public int GetHashCode(ClothType x) { return (int)x; } } class Cloth { } class Program { static void Main(string[] args) { ClothTypeEnumComparer myEnumComparer = new ClothTypeEnumComparer(); //在实际项目中,比较器可以保存一份,方便服用,测试暂且如此 Dictionary<ClothType, Cloth> dicCloth = new Dictionary<ClothType, Cloth>(myEnumComparer); dicCloth.Add(ClothType.Coat, new Cloth()); Console.ReadKey(); } } }
原文地址:https://www.cnblogs.com/luguoshuai/p/8962329.html
时间: 2024-11-08 19:41:34