我有一个通用类型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();
}
}
答案 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
课程中的GetHashCode
和Class1
方法,因此Distinct
可以在您的代码段中使用,而不会Select
。< / p>