检查对象列表中的 属性 是否对所有项目都相等
Checking if a property in a list of objects is equal for all items
这个问题与 this 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;
}
}
...只需更少的代码。
为了测试它们是否都具有相同的值,您需要知道对象值的一个是什么,这就是为什么您总是需要获取“ first" 值并将其用作比较(尽管很明显,它是第一个、最后一个、中间等并不重要,只要它是一个存在的索引即可)。
根据您的需要,您可以使用 GroupBy 或 DistinctBy。当你处理列表时,这不是一个问题,但如果你使用常规 IEnumerable
s,这意味着你需要多次计算源。
var countOfMyProperties = MyList.GroupBy(x => x.MyProperty).Count();
// 1 = all the same
// >1 = not all the same
使用 GroupBy 可以让您提出自然的 follow-up 问题“嗯,如果不是我的所有对象都具有相同的 MyProperty 值,那么有多少不同的值(一个“组”),以及有多少对象在每组中?
此外,如果可能,我建议使用 x.MyProperty == firstResult
而不是 x.MyProperty.Equals(firstResult)
。
这个问题与 this 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;
}
}
...只需更少的代码。
为了测试它们是否都具有相同的值,您需要知道对象值的一个是什么,这就是为什么您总是需要获取“ first" 值并将其用作比较(尽管很明显,它是第一个、最后一个、中间等并不重要,只要它是一个存在的索引即可)。
根据您的需要,您可以使用 GroupBy 或 DistinctBy。当你处理列表时,这不是一个问题,但如果你使用常规 IEnumerable
s,这意味着你需要多次计算源。
var countOfMyProperties = MyList.GroupBy(x => x.MyProperty).Count();
// 1 = all the same
// >1 = not all the same
使用 GroupBy 可以让您提出自然的 follow-up 问题“嗯,如果不是我的所有对象都具有相同的 MyProperty 值,那么有多少不同的值(一个“组”),以及有多少对象在每组中?
此外,如果可能,我建议使用 x.MyProperty == firstResult
而不是 x.MyProperty.Equals(firstResult)
。