這個問題與這個 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))
但我覺得有一種更優雅的方式來做到這一點?
uj5u.com熱心網友回復:
你所擁有的很好。它本質上等同于:
var firstResult = MyList[0].MyProperty;
bool allSame = true;
foreach (var entry in MyList)
{
if (!entry.MyProperty.Equals(firstResult)
{
allSame = false;
break;
}
}
...只需更少的代碼。
為了測驗它們是否都具有相同的值,您需要知道物件的值是什么,這就是為什么您總是需要獲取“第一個”值并將其用作比較(盡管顯然,它只要它是存在的索引,它是第一個,最后一個,中間的等等都沒有關系)。
根據您的需要,您可以使用 GroupBy 或 DistinctBy。當您處理 Lists 時,這不是一個問題,但如果您使用常規IEnumerables 這意味著您需要多次計算源。
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479522.html
