繁体   English   中英

检查对象列表中的属性是否对所有项目都相等

[英]Checking if a property in a list of objects is equal for all items

这个问题与这个 C# question非常相似,但不是它们都等于一个特定的已知值,我想知道它们是否彼此相同,无论该值是什么。

我的列表包含许多对象,例如:

public MyClass {
    public int Id { get; set; }
    public string MyProperty { get; set;}
}

我最初的方法是:

List<MyClass> MyList = new List<MyClass>();
//... Add some values

string firstResult = MyList.First().MyProperty;
return MyList.All(x => x.MyProperty.Equals(firstResult))

但我觉得有一种更优雅的方式来做到这一点?

你所拥有的很好。 它本质上等同于:

var firstResult = MyList[0].MyProperty;
bool allSame = true;
foreach (var entry in MyList)
{
    if (!entry.MyProperty.Equals(firstResult)
    {
        allSame = false;
        break;
    }
}

...只需更少的代码。

为了测试它们是否都具有相同的值,您需要知道对象的值是什么,这就是为什么您总是需要获取“第一个”值并将其用作比较(尽管显然,它只要它是存在的索引,它是第一个,最后一个,中间的等等都没有关系)。

根据您的需要,您可以使用 GroupBy 或 DistinctBy。 当您处理 Lists 时,这不是一个问题,但如果您使用常规IEnumerable ,则意味着您需要多次计算源。

var countOfMyProperties = MyList.GroupBy(x => x.MyProperty).Count();
// 1 = all the same
// >1 = not all the same

使用 GroupBy 可以让您提出自然的后续问题“好吧,如果不是我的所有对象都具有相同的 MyProperty 值,那么有多少不同的值(“组”),以及每个组中有多少对象?

另外,如果可能的话,我建议使用x.MyProperty == firstResult而不是x.MyProperty.Equals(firstResult)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM