使用LINQ检查枚举的每个值最多是否在列表的一个元素中?

Mr.*_*Boy 0 c# linq lambda

鉴于MyEnum,类MyClass财产EnumValue,并IList<MyClass> list有一个聪明的LINQ的方法来确定不枚举值在一个以上的列表元素被发现,而无需编写一个循环?

我知道一点代码高尔夫球,但这是我正在编写的真实世界的代码,我想知道它是否有可能以一种非恐怖的方式存在?

例如:

foreach (var e in Enum.GetValues(typeof(MyEnum)))
                Assert.IsTrue(list.Count(x => x.EnumValue == e) <= 1);
Run Code Online (Sandbox Code Playgroud)

Art*_*aca 8

如果要检查对象中的MyEnum值是否list最多出现一次,则可以listEnumValue属性值对项目进行分组,并检查这些组中的项目数:

bool result = list.GroupBy(c => c.EnumValue).All(g => g.Count() == 1);
Run Code Online (Sandbox Code Playgroud)