C# 确定集合中属性的不同值的数目

C# 确定集合中属性的不同值的数目,c#,generics,collections,C#,Generics,Collections,我有一个泛型类型列表list list1,其中TypeA包含一个枚举类型 我想知道通过list1搜索枚举类型的不同值的数量的最有效和最简单的方法 集合中没有内置方法 以下是示例代码: using System; using System.Collections.Generic; namespace space { enum TypeEnum { E1, E2} public class Class1 { public TypeEnum Eobj { get; set; } p

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


}
}
使用系统;
使用System.Collections.Generic;
命名空间空间
{
枚举类型枚举{E1,E2}
公共班级1
{
公共类型枚举Eobj{get;set;}
公共双doubobbj{get;set;}
公共类别1()
{
doubObj=0.0;
Eobj=TypeEnum.E1;
}
公共类1(双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双
{
doubObj=doubbjin;
Eobj=EobjIn;
}
}
公共静态void Main()
{
List list1=新列表();
Class1 o1=新的Class1(1,TypeEnum.E1);
Class1 o2=新的Class1(2,TypeEnum.E1);
Class1 o3=新的Class1(3,TypeEnum.E2);
清单1.添加(o1);
列表1.添加(o2);
清单1.添加(o3);
//尝试此操作仅统计Class1而不是枚举类型的不同对象
var count=list1.Distinct().count();
}
}

使用该方法可以轻松实现这一点。 对于您的代码,您只需要另外一个
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();
List list1=新列表();
Class1 o1=新的Class1(1,TypeEnum.E1);
Class1 o2=新的Class1(2,TypeEnum.E1);
Class1 o3=新的Class1(3,TypeEnum.E2);
清单1.添加(o1);
列表1.添加(o2);
清单1.添加(o3);
var count=list1.Select(o=>o.Eobj.Distinct().count();

或者,您可以覆盖
Class1
类中的
Equals
GetHashCode
方法,这样
Distinct
将在您的代码段中工作,而不使用
Select

是否可以发布您的代码?Thanksure…更新了基线代码…但我知道我可以编写一个函数来实现这一点,但不确定最好的方法。谢谢…请参阅上面的代码。我想我不是很清楚,但我想计算嵌套在另一个类中的枚举数。@gwizardry谢谢,请始终用代码说明您的问题-这可以最大限度地减少误解的机会:-)我已经更新了答案。谢谢,回到C,很高兴看到这些单行解决方案!