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

Determine number of different values for a property in a collection

我有一个通用类型列表 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();


}
}

您可以使用 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();

或者,您可以覆盖 Class1 class 中的 EqualsGetHashCode 方法,这样 Distinct 就可以在您的代码段中使用,而无需 Select.