3组吧,contains比较内部应该是比较引用吧,当然简单类型除外

解决方案 »

  1.   

    那怎么说来字典用class作为key就没意义?》??
      

  2.   

    那怎么说来字典用class作为key就没意义?》??
    你看一下contains的源码,如果是按==比较的话,不妨重载==运算符
      

  3.   

    那怎么说来字典用class作为key就没意义?》??
    你看一下contains的源码,如果是按==比较的话,不妨重载==运算符
    已经解决了值类型的比较,是直接比较结果。这种自定义对象类型,比较就比较另类了:像Contain是直接比较是不是引用同一个对象,所以每次new的时候引用对象不是同一个,所以死都会重复。所以得重写GetHashCode和重写对应的 Eque方法来进行对象是否相等进行比较繁琐public class TKey 
        {
            public int Id { get; set; }        public string Name { get; set; }        public override int GetHashCode()
            {
                return this.Id.GetHashCode();           
            }        public override bool Equals(object obj)
            {
                if (obj == null) 
                    return false;            if (obj.GetType() != typeof(TKey))
                    return false;            TKey key = obj as TKey;
                return key.Id == Id && key.Name == key.Name;
            }        
            public string Key
            {
                get
                {
                    return "";
                }
            }
        }    public class TValueItem
        {
            public string ValueItem { get; set; }
        }    class Program
        {
            static void Main(string[] args)
            {
                var dics = new Dictionary<TKey, List<TValueItem>>();            var dicList=new List<KeyValuePair<TKey,List<TValueItem>>>();
                var key = new TKey()
                {
                 Id=3,
                 Name="ABC"
                };
                if(!dics.ContainsKey(key))
                    dics.Add(key, new List<TValueItem>());            dics[key].Add(new TValueItem() 
                { 
                 ValueItem="Item-ABC"
                });            key = new TKey()
                {
                    Id = 4,
                    Name = "EFG"
                };
                if (!dics.ContainsKey(key))
                    dics.Add(key, new List<TValueItem>());            dics[key].Add(new TValueItem()
                {
                    ValueItem = "Item-EFG"
                });
                key = new TKey()
                {
                    Id = 3,
                    Name = "ABCE"
                };
                if (!dics.ContainsKey(key))
                    dics.Add(key, new List<TValueItem>());            dics[key].Add(new TValueItem()
                {
                    ValueItem = "Item-ABC222"
                });            key = new TKey()
                {
                    Id = 5,
                    Name = "ABC"
                };
                if (!dics.ContainsKey(key))
                    dics.Add(key, new List<TValueItem>());            dics[key].Add(new TValueItem()
                {
                    ValueItem = "Item-ABC222"
                });            foreach (var pair in dics)
                {
                    Console.WriteLine("Key:" + pair.Key.Id);
                }
                Console.Read();        }
        }