比较对象属性

问题描述:

我有2个对象列表,我需要知道是否有任何属性发生了变化。 以下是我有:比较对象属性

public class Person 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
} 

然后,我有Person 2名列表。

var list1 = new List<Person>(); 
var list2 = new List<Person>(); 

我需要知道,如果list1list2包含一些Person对象,确保该属性的值是相同的,通过PersonId比较。

+1

你有没有尝试过吗?你看过linq吗?这[[加入]](http://*.com/documentation/c%23/68/linq-queries/2994/joins-inner-left-right-cross-and-full-outer-joins#t=201611241921121673108 )文档是一个很好的开始。也只是使用'where'可以做 –

+0

是的,我的问题是指同时比较所有属性 –

+1

因此,再次请显示您已经尝试过...我们可以帮助您更正它,但不会为您写入 –

我确定有不同的方法来做到这一点,但我建议的解决方案如下。

var list1 = new List<Person> 
{ 
    new Person() 
    { 
     PersonId = 123, 
     Name = "Tom", 
     Email = "[email protected]" 
    } 
}; 


var list2 = new List<Person> 
{ 
    new Person() 
    { 
     PersonId = 123, 
     Name = "Tom", 
     Email = "[email protected]" 
    } 
}; 

var count = list1.Count; 
if(list1.Count.Equals(list2.Count)) 
{ 
    var i; 
    for(i=0; i< list1.Count; i++) 
    { 
     if(!list1[i].PersonId.Equals(list2[i])) 
     { 
      //DO somthing they lists are NOT SAME 
      //One of the Person object contain different ID 
     } 
    } 
} 
else 
{ 
    //DO somthing, list count is different.. 
} 

我也建议使用

Dictionary<string, Person> 

键值对,其中的字符串是人的身份证,有两个字典比较关键看它是否在其他词典存在尝试,它不重复通过整个词典,使其不那么重

希望它有帮助