c# Dictionary 自定义类型的key 如何判断是否存在
高洛峰
高洛峰 2016-11-12 10:57:37
[C#讨论组]
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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
三叔

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

换struct

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


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号