我有以下类。我希望在Admin_Fee_Prop的所有项目中保持BP值的唯一性。我不知道应该使用什么集合类型的属性Admin_Fee_Prop,也不知道如何定义Admin_FeeClass,以便BP属性值在Admin_Fee_Prop的所有项目中保持唯一?有时,我可能还需要复合属性的唯一性。
Public Class BE
{
public string Name {get;set:)
public List<Admin_Fee> Admin_Fee_Prop {get;set:)
}
public class Admin_Fee
{
public string BP_Name { get; set; }
public int BP { get; set; }
public int BP_Perc { get; set; }
}
将BP属性定义为Guid
而不是int
。调用Guid.NewGuid((生成新的唯一值。
如果您想在每次创建Admin_Fee_Prop时实例化它,请添加一个默认构造函数,该构造函数将为BP生成一个新值。此外,您可以将Admin_Fee_Prop存储在Dictionary中,其中Key为Admin_Fee_Prop.BP,value为Admin_Fee _Prop类型的对象。
使用HashSet<Admin_Fee>
,并在Admin_Fee
中实现Equals
和GetHashCode
,这样,如果具有相同的BP
值,则Admin_Fee
的两个实例被视为相等:
public Class BE
{
public string Name {get;set:)
public HashSet<Admin_Fee> Admin_Fee_Prop {get;set:)
}
public class Admin_Fee
{
public string BP_Name { get; set; }
public int BP { get; set; }
public int BP_Perc { get; set; }
public override bool Equals(object other)
{
if (!(other is Admin_Fee))
return false;
return this.BP == ((Admin_Fee)other).BP;
}
public override int GetHashCode()
{
return BP;
}
}
另一种可能的方法是实现IEqualityComparer<Admin_Fee>
,并将其作为参数传递给HashSet<Admin_Fee>
构造函数。
有时,我可能还需要复合属性的唯一性
在这种情况下,您需要在Equals
和GetHashCode
中考虑所有这些属性。有关如何从多个属性生成哈希代码的示例,请查看以下答案。