我必须关注课程:
public class NominalValue
{
public int Id {get; set;}
public string ElementName {get; set;}
public decimal From {get; set;}
public decimal To {get; set;}
public bool Enable {get; set;}
public DateTime CreationDate {get; set;}
public int StandardValueId {get; set;} //FK for StandardValue
}
public class StandardValue
{
public int Id {get; set;}
public string ElementName {get; set;}
public decimal From {get; set;}
public decimal To {get; set;}
public bool Enable {get; set;}
public DateTime CreationDate {get; set;}
}
用户想要填充nominalValue
对象属性。填充nominalValue
属性可以双向执行:
nominalValue
的值。nominalValue
对象的standardValue
的用户加载值,然后更改某些值。有时我需要知道指定元素的nominalValue
个对象的某些属性是否等于对应的standardValue
?
我不想从standardValue
加载Db
来检查这种相等性,所以我决定在HashValue
类中定义NominalValue
属性:
public class NominalValue
{
public int Id {get; set;}
public string ElementName {get; set;}
public decimal From {get; set;} //<-- 1st parameter for generating hash value
public decimal To {get; set;} //<-- 2nd parameter for generating hash value
public bool Enable {get; set;} //<-- 3rd parameter for generating hash value
public DateTime CreationDate {get; set;}
public int StandardValueId {get; set;}
public string HashValue {get;set;} //<-- this property added
}
当用户使用nominalValue
属性填充standardValue
属性时,我会根据3个属性(From
,To
,Enable
)计算其值并保存使用其他属性,当我检查nominalValue
是否填充standardValue
时,我会计算From
,To
,Enable
的哈希码并进行比较结果为HashValue
(而不是从standardValue
加载Db
。
是否有任何基于3个属性值(From
,To
,Enable
)计算唯一哈希码的机制?
答案 0 :(得分:2)
您可以尝试这样做:
private int GetHashValue() {
unchecked
{
int hash = 17;
//dont forget nullity checks
hash = hash * 23 + From.GetHashCode();
hash = hash * 23 + To.GetHashCode();
hash = hash * 23 + Enable.GetHashCode();
return hash;
}
}
您也可以在匿名类型上使用GetHashCode方法
private int GetHashValue() {
return new { From, To, Enable }.GetHashCode();
}