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

C# 使用LINQ检查枚举的每个值最多在列表的一个元素中?,c#,linq,lambda,C#,Linq,Lambda,给定MyEnum,具有属性EnumValue和IList list的类MyClass是否有一种聪明的LINQ方法来确定在多个列表元素中找不到枚举值,而无需编写循环 我知道一点代码高尔菲,但这是我正在编写的一段真实世界的代码,我想知道这是否可能以一种非恐怖的方式实现 例如: foreach (var e in Enum.GetValues(typeof(MyEnum))) Assert.IsTrue(list.Count(x => x.EnumValue ==

给定MyEnum,具有属性EnumValue和IList list的类MyClass是否有一种聪明的LINQ方法来确定在多个列表元素中找不到枚举值,而无需编写循环

我知道一点代码高尔菲,但这是我正在编写的一段真实世界的代码,我想知道这是否可能以一种非恐怖的方式实现

例如:

foreach (var e in Enum.GetValues(typeof(MyEnum)))
                Assert.IsTrue(list.Count(x => x.EnumValue == e) <= 1);
如果要检查列表对象中的MyEnum值是否最多出现一次,可以按EnumValue属性值对列表中的项目进行分组,并检查这些组中的项目数:

bool result = list.GroupBy(c => c.EnumValue).All(g => g.Count() == 1);

当你说不使用循环-你是说在你的代码中不使用循环吗?如果某个地方没有执行循环,这是不可能的。请注意,如果您用一个而不是仅仅描述它来演示问题,则更容易理解该问题。我无法理解这一部分:在多个列表中找不到枚举值element@JonSkeet我认为不写循环可能是隐含的,但我添加了一个澄清的示例,您还可以检查它是否等于1。它永远不能小于1。@YacoubMassad:绝对正确。