维护类中一个或多个属性值的唯一性



我有以下类。我希望在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中实现EqualsGetHashCode,这样,如果具有相同的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>构造函数。

有时,我可能还需要复合属性的唯一性

在这种情况下,您需要在EqualsGetHashCode中考虑所有这些属性。有关如何从多个属性生成哈希代码的示例,请查看以下答案。

最新更新