比较列表中所有位置的项目

Mig*_*ura -1 c#

我有以下课程:

public class Person {
   public String Name { get; set; }
   public Int32 Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有两个人名单:

List<Person> a = service.GetPersons("a");
List<Person> b = service.GetPersons("b");
Run Code Online (Sandbox Code Playgroud)

列表大小相同.是否有可能使用Lambda表达式检查该人在同一位置是否在两个列表中具有相同的名称和年龄?我想检查所有职位.

das*_*ght 6

您可以使用SequenceEqual和自定义比较,如下所示:

var personCmp = new PersonComparer();
var same = a.SequenceEqual(b, personCmp);
...
class PersonComparer : IEqualityComparer<Person> {
    public bool Equals(Person p1, Person p2) {
        return p1.Name==p2.Name && p1.Age == p2.Age;
    }
    public int GetHashCode(Person p) {
        return p.Name.GetHashCode()*31 + p.Age;
    }
}
Run Code Online (Sandbox Code Playgroud)


Ren*_*ogt 5

你可以Zip()用来解决这个问题:

var equals = a.Zip(b, (xa, xb) => new Tuple<Person, Person>(xa, xb))
              .All(t => 
                       t.Item1.Name == t.Item2.Name &&
                       t.Item1.Age == t.Item2.Age);
Run Code Online (Sandbox Code Playgroud)

请注意,这只会是正确的,如果两个列表确实有相同的尺寸.