2011-11-18 80 views
0

我有以下類。我希望在所有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; } 

} 

回答

1

定義BP財產Guid而不是int。調用Guid.NewGuid()來生成新的唯一值。

如果您想在每次創建Admin_Fee_Prop時對其進行實例化,請添加一個將爲BP生成新值的默認構造函數。另外,您可以將Admin_Fee_Prop存儲在密鑰將爲Admin_Fee_Prop.BP的字典中,並且值將是Admin_Fee_Prop類型的對象。

0

使用HashSet<Admin_Fee>,並實施Admin_FeeEqualsGetHashCode,這樣的Admin_Fee兩個實例被認爲是相等的,如果有相同的BP值:

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