确定集合中属性的不同值的数量

时间:2015-01-13 11:32:08

标签: c# generics collections

我有一个通用类型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 个答案:

答案 0 :(得分: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();

或者,您可以覆盖Equals课程中的GetHashCodeClass1方法,因此Distinct可以在您的代码段中使用,而不会Select。< / p>