c# list 自定义类 相等 接口
时间: 2023-06-19 19:04:28 浏览: 80
如果你想对自定义类进行相等性比较,可以实现 `IEquatable<T>` 接口。这个接口定义了一个名为 `Equals` 的方法,用于比较两个对象是否相等。
下面是一个简单的示例代码:
```csharp
public class Person : IEquatable<Person>
{
public string Name { get; set; }
public int Age { get; set; }
public bool Equals(Person other)
{
if (other == null)
return false;
return (this.Name == other.Name && this.Age == other.Age);
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
Person personObj = obj as Person;
if (personObj == null)
return false;
else
return Equals(personObj);
}
public override int GetHashCode()
{
return (this.Name.GetHashCode() ^ this.Age.GetHashCode());
}
}
```
在这个示例代码中,我们实现了 `IEquatable<Person>` 接口,并重载了 `Equals`、`GetHashCode` 方法。现在我们可以将 `Person` 类型的对象添加到 `List<Person>` 中,并使用 `List<T>.Contains` 方法来判断是否包含某个特定的 `Person` 对象。
```csharp
List<Person> persons = new List<Person>();
persons.Add(new Person { Name = "Tom", Age = 30 });
persons.Add(new Person { Name = "Jerry", Age = 25 });
bool containsTom = persons.Contains(new Person { Name = "Tom", Age = 30 }); // true
bool containsJerry = persons.Contains(new Person { Name = "Jerry", Age = 26 }); // false
```
注意,我们在重载 `Equals` 方法时,需要先检查传入的参数是否为 `null`。如果不检查,会导致空引用异常。
阅读全文