c# Dictionary 自定义类型的key 如何判断是否存在
高洛峰
高洛峰 2016-11-12 10:57:37
0
1
866
public class DicConfigKey
    {
        public string ID { get; set; }
        public string TypeID { get; set; }
    }
Dictionary<DicConfigKey, string> dic = new Dictionary<DicConfigKey, string>();
            dic.Add(new DicConfigKey { ID = "1", TypeID = "010" }, "test1");
            dic.Add(new DicConfigKey { ID = "1", TypeID = "020" }, "test2");
            dic.Add(new DicConfigKey { ID = "2", TypeID = "020" }, "test3");
            DicConfigKey key = new DicConfigKey() { ID = "2", TypeID = "020" };
            //bool flag = dic.Keys.Contains(key);
            bool flag = dic.ContainsKey(key);

如上代码,Dictionary中自定义类型的键Key,如何判断key是否存在呢,dic.Keys.Contains和dic.ContainsKey都返回false

问题已解决,重写DicConfigKey的Equals和GetHashCode方法即可,代码如下

public class DicConfigKey
    {
        public string ID { get; set; }
        public string TypeID { get; set; }

        public override bool Equals(object obj)
        {
            if (obj == this)
                return true;
            if (!(obj is DicConfigKey))
                return false;
            var dicconfikey = (DicConfigKey)obj;
            return ID == dicconfikey.ID && TypeID == dicconfikey.TypeID;
        }

        public override int GetHashCode()
        {
            return (ID + TypeID).GetHashCode();
        }
    }


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(1)
三叔

http://stackoverflow.com/questions/16472159/using-a-class-versus-struct-as-a-dictionary-key

换struct

或者使用GetHashCode/Equals自己来写对比规则


Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template