我的列表中有两个对象,并且希望确保这些对象的所有属性都具有相同的值。
例如:
List<Person> persons = new List<Person>
{
new Person { Id = "1", Name = "peter" },
new Person { Id = "1", Name = "peter" }
};
Run Code Online (Sandbox Code Playgroud)
现在我想知道true两个对象的属性是相同的。我尝试过以下 lambda 表达式。
var areEqual = persons.All(o => o == persons.First());
Run Code Online (Sandbox Code Playgroud)
但我要false进去了areEqual。我无法理解为什么会这样,并且想知道如何正确地做到这一点。
您可以使用以下方法查明所有元素是否相同:
persons.Distinct().Count() == 1
Run Code Online (Sandbox Code Playgroud)
如果它为零,则首先没有条目,如果它大于 1,则有不相同的条目。
现在...如何确保调用.Distinct()知道两个对象何时相同?
选项 1:Person已经是record. 伟大的。内置功能。完毕。
选项 2:Person实施IEquatable<Person>并执行您想要的检查。
选项 3:以您需要的方式自行覆盖Person。Object.EqualsObject.GetHashCode
选项 4:Person不是以上任一选项,并且您不想更改它来选中其中一个框。然后您仍然可以实现自己的实例IEqualityComparer<Person>并将其实例传递给不同的方法,如下所示:
persons.Distinct(new MyCustomPersonEqualityComparer()).Count() == 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1913 次 |
| 最近记录: |