保持类中属性/属性值的唯一性

时间:2011-11-18 15:19:45

标签: .net class collections

我有以下课程。我希望在Admin_Fee_Prop的所有项目中保持BP值唯一。我不知道应该使用什么集合类型的属性Admin_Fee_Prop或如何定义Admin_Fee类,以便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; }

}

2 个答案:

答案 0 :(得分:1)

将BP属性定义为Guid而不是int。调用Guid.NewGuid()来生成新的唯一值。

如果要在每次创建Admin_Fee_Prop时对其进行实例化,请添加一个默认构造函数,该构造函数将为BP生成新值。此外,您可以将Admin_Fee_Prop存储在一个字典中,其中Key为Admin_Fee_Prop.BP,值为Admin_Fee_Prop类型的对象。

答案 1 :(得分:0)

使用HashSet<Admin_Fee>,并在Equals中实施GetHashCodeAdmin_Fee,以便Admin_Fee的两个实例具有相同的BP 1}}值:

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中考虑所有这些属性。有关如何从多个属性生成哈希码的示例,请查看this answer