C# List Contains判断引用对象

在C#中,List<T>.Contains 方法用于确定列表是否包含特定元素。对于引用类型的对象(如自定义类的实例),默认情况下 Contains 使用的是对象引用的比较,而不是对象内容的比较。

这意味着,如果你有多个对象,即使它们的内容完全相同,但它们是不同的实例(即有不同的引用),那么 Contains 将不会认为它们相等。

例如:

Csharp
深色版本
public class Person
{
    public string Name { get; set; }
}

Person person1 = new Person { Name = "John" };
Person person2 = new Person { Name = "John" };

List<Person> people = new List<Person>();
people.Add(person1);

bool contains = people.Contains(person2); // 这里会返回 false
在这个例子中,person1 和 person2 有着相同的属性值,但是它们是两个不同的实例,所以 Contains 返回 false。

如果你想要根据对象的内容来判断是否包含,你需要重写 Equals 和 GetHashCode 方法,或者你可以传递一个自定义的 IEqualityComparer<T> 给 Contains 方法。

下面是如何通过重写 Equals 和 GetHashCode 来实现基于内容的比较的例子:

Csharp
深色版本
public class Person : IEquatable<Person>
{
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        return Equals(obj as Person);
    }

    public bool Equals(Person other)
    {
        if (other == null)
            return false;

        return this.Name == other.Name;
    }

    public override int GetHashCode()
    {
        return (Name != null ? Name.GetHashCode() : 0);
    }
}

// 现在使用 Contains 方法将会比较对象的内容:
Person person1 = new Person { Name = "John" };
Person person2 = new Person { Name = "John" };

List<Person> people = new List<Person>();
people.Add(person1);

bool contains = people.Contains(person2); // 这里会返回 true
请注意,当重写了 Equals 方法时,通常也应该重写 GetHashCode 方法,以确保对象在哈希表(如字典或集合)中的行为正确。如果两个对象被认为是相等的(Equals 返回 true),那么它们的哈希代码也应该是相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值