GetHashCode实现的有关问题

GetHashCode实现的问题
之前写了个class
实现了这个class的GetHashCode函数
class如下:


public class RegistryObj
    {
        public string Key
        {
            get;
            set;
        }
        public string Value
        {
            get;
            set;
        }
    }


这个类只有两个成员
GetHashCode实现如下:


public int GetHashCode(RegistryObj obj)
        {
            int hashProductName = obj.Key == null ? 0 : obj.Key.GetHashCode();
            int hashProductCode = obj.Value.GetHashCode();
            return hashProductName ^ hashProductCode;
        }


现在由于某些原因 这个类要增加成员如下


public class RegistryObj
    {
        public string KeyName{ get; set; }
        public string ValueName { get; set; }
        public RegistryValueKind ValueType { get; set; }
        public string Value { get; set; }
        public OptionEnum EnumOptionType { get; set; }
    }


我想问的是GetHashCode中也要取到这个类的每个成员 然后返回他们相互^的结果吗?
RegistryValueKind 和枚举类型有GetHashCode方法吗?
------解决方案--------------------
本帖最后由 caozhy 于 2014-07-13 11:55:27 编辑
和你说下HashCode的原则:
(1)两个对象相等,必然HashCode相等,否则是错误的!
(2)两个对象不相等,HashCode可以相等,也可以不等,但是我们的原则是尽可能让它们不等。
(3)基于以上原则,如果你改变了GetHashCode,你应该同时重载Equals。