c#判断两个对象内置属性是否相等,并且对象内部有一对多的关系该如何处理
时间: 2024-03-17 21:44:58 浏览: 11
如果两个对象内部存在一对多的关系,我们需要对每个子对象进行比较,只有当所有子对象都相等时,才认为两个对象相等。可以通过重写Equals方法来实现这个功能。例如:
```csharp
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public List<Address> Addresses { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
Person other = (Person)obj;
if (Name != other.Name || Age != other.Age)
{
return false;
}
if (Addresses == null && other.Addresses == null)
{
return true;
}
if (Addresses == null || other.Addresses == null || Addresses.Count != other.Addresses.Count)
{
return false;
}
for (int i = 0; i < Addresses.Count; i++)
{
if (!Addresses[i].Equals(other.Addresses[i]))
{
return false;
}
}
return true;
}
}
class Address
{
public string Street { get; set; }
public string City { get; set; }
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
Address other = (Address)obj;
return Street == other.Street && City == other.City;
}
}
Person person1 = new Person
{
Name = "Tom",
Age = 20,
Addresses = new List<Address>
{
new Address { Street = "123 Main St", City = "New York" },
new Address { Street = "456 Broadway", City = "Los Angeles" }
}
};
Person person2 = new Person
{
Name = "Tom",
Age = 20,
Addresses = new List<Address>
{
new Address { Street = "123 Main St", City = "New York" },
new Address { Street = "456 Broadway", City = "Los Angeles" }
}
};
bool isEqual = person1.Equals(person2); // 返回 true
```
在这个例子中,重写了Person类的Equals方法,首先比较了Name和Age属性是否相等,然后再比较了Addresses属性中所有子对象的相等性。如果Addresses属性为null,则认为两个对象相等;如果Addresses属性的长度不同,则认为两个对象不相等;如果Addresses属性中有任意一个子对象不相等,则认为两个对象不相等。最终,通过调用Equals方法来比较person1和person2对象的属性值是否相等,最终返回true,表示这两个对象相等。