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,很高兴看到这些单行解决方案!