GetHashCode实现的有关问题
GetHashCode实现的问题
之前写了个class
实现了这个class的GetHashCode函数
class如下:
这个类只有两个成员
GetHashCode实现如下:
现在由于某些原因 这个类要增加成员如下
我想问的是GetHashCode中也要取到这个类的每个成员 然后返回他们相互^的结果吗?
RegistryValueKind 和枚举类型有GetHashCode方法吗?
------解决方案--------------------
和你说下HashCode的原则:
(1)两个对象相等,必然HashCode相等,否则是错误的!
(2)两个对象不相等,HashCode可以相等,也可以不等,但是我们的原则是尽可能让它们不等。
(3)基于以上原则,如果你改变了GetHashCode,你应该同时重载Equals。
之前写了个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方法吗?
------解决方案--------------------
和你说下HashCode的原则:
(1)两个对象相等,必然HashCode相等,否则是错误的!
(2)两个对象不相等,HashCode可以相等,也可以不等,但是我们的原则是尽可能让它们不等。
(3)基于以上原则,如果你改变了GetHashCode,你应该同时重载Equals。