我有以下课程。我希望在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; }
}
答案 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
中实施GetHashCode
和Admin_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>
构造函数。
有时我可能还需要复合属性的唯一性
在这种情况下,您需要在Equals
和GetHashCode
中考虑所有这些属性。有关如何从多个属性生成哈希码的示例,请查看this answer。