2015-01-13 30 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

相关问题