Dictionary<key ,value>如果key是一个复杂对象,会不会影响效率?

解决方案 »

  1.   

    如果没有重写TKey类型的Equal和GetHashCode这两个实例方法,那么不会影响效率(当然,不一定按照期望的方式工作)
    如果重写了,就要看是怎么写的,可能导致效率下降或者不能正常工作
      

  2.   

    没考虑过,碰到这种还是按照楼上的朋友说的重写Equals和GetHashCode。
      

  3.   

    会,例如字符串对象做 key,每次存入或读取都要计算该字符串的 hash 值,相当于把字符串遍历了一遍,这要耗费不少时间,相对于用整数对象作 key 来说,效率确实会受影响。以下是 String 的 GetHashCode() 源码。从微软库反编译出来的。[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
    public override unsafe int GetHashCode()
    {
        fixed (char* str = ((char*) this))
        {
            char* chPtr = str;
            int num = 0x15051505;
            int num2 = num;
            int* numPtr = (int*) chPtr;
            for (int i = this.Length; i > 0; i -= 4)
            {
                num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
                if (i <= 2)
                {
                    break;
                }
                num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
                numPtr += 2;
            }
            return (num + (num2 * 0x5d588b65));
        }
    }
      

  4.   

    数据库对象全局标志Urn,大家知道吗,我想把它作为我字典的key