2015-01-13 56 views
0

我有一個通用類型的列表List<TypeA> list1其中TypeA包含枚舉類型。確定集合中某個屬性的不同值的數量

我想知道通過list1獲取枚舉類型的不同值的數量的最有效和最簡單的方法。

在集合中沒有出現內置方法。

這裏的示例代碼:

using System; 
using System.Collections.Generic; 

namespace space 
{ 
enum TypeEnum { E1, E2} 

public class Class1 
{ 
    public TypeEnum Eobj { get; set; } 
    public double doubObj { get; set; } 

    public Class1() 
    { 
     doubObj = 0.0; 
     Eobj = TypeEnum.E1; 

    } 

    public Class1(double doubObjIn, TypeEnum EobjIn) 
    { 
     doubObj = doubObjIn; 
     Eobj = EobjIn; 

    } 
} 

public static void Main() 
{ 
    List<Class1> list1 = new List<Class1>(); 
    Class1 o1 = new Class1(1, TypeEnum.E1); 
    Class1 o2 = new Class1(2, TypeEnum.E1); 
    Class1 o3 = new Class1(3, TypeEnum.E2); 

    list1.Add(o1); 
    list1.Add(o2); 
    list1.Add(o3); 

    // trying this only counts distinct objects of Class1 not of Enum Types 
    var count = list1.Distinct().Count(); 


} 
} 
+1

請問您可以發佈您的代碼嗎?謝謝 – Christos

+0

當然...更新了基線代碼...但是雖然我知道我可以寫一個函數來做到這一點,但不知道最好的方法。 – gwizardry

回答

0

你可以做到這一點很容易地使用Distinct方法。 使用你的代碼,你只需要一個額外的Select調用來選擇枚舉值。

List<Class1> list1 = new List<Class1>(); 
Class1 o1 = new Class1(1, TypeEnum.E1); 
Class1 o2 = new Class1(2, TypeEnum.E1); 
Class1 o3 = new Class1(3, TypeEnum.E2); 

list1.Add(o1); 
list1.Add(o2); 
list1.Add(o3); 

var count = list1.Select(o => o.Eobj).Distinct().Count(); 

或者,您也可以覆蓋EqualsGetHashCode方法Class1類,所以Distinct會在你的代碼片段工作,沒有Select

+0

謝謝...看到上面的代碼。我想我不太清楚,但我正在計算嵌套在另一個類中的枚舉。 – gwizardry

+0

@gwizardry謝謝,總是說明你的代碼問題 - 它最大限度地減少了誤解的機會:-)我已經更新了答案。 – BartoszKP

+0

謝謝,回到C#,很高興看到這些解決方案! – gwizardry

相關問題