C# List<T> Contains<T>()的用法小结


在C#中,`List` 类是泛型集合的一个非常常用的实现,它提供了多种方法来操作集合中的元素。`Contains()` 方法是 `List` 类中用于检查列表中是否包含指定元素的方法。这个方法非常直观且易于使用。

### 基本用法

`Contains()` 方法不需要显式指定泛型类型 ``,因为当你创建 `List` 实例时,类型 `` 就已经确定了。`Contains` 方法接收一个与列表中元素类型相同的参数,并返回一个布尔值(`true` 或 `false`),表示列表中是否包含该元素。


List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
bool containsThree = numbers.Contains(3); // 返回 true
bool containsSix = numbers.Contains(6); // 返回 false

### 注意事项

1. **性能**:`Contains` 方法通常使用线性搜索来查找元素,这意味着其时间复杂度为 O(n),其中 n 是列表中元素的数量。在大型列表中查找元素时,这可能会影响性能。

2. **相等性判断**:`Contains` 方法使用元素的 `Equals` 方法来确定两个元素是否相等。因此,如果你自定义了类的 `Equals` 方法,请确保它正确实现了你的相等性逻辑。

3. **类型安全**:由于 `List` 是泛型的,所以 `Contains` 方法会确保传递给它的参数与列表中元素的类型相匹配。如果类型不匹配,编译时会报错。

4. **空引用**:如果列表(`List`)是 `null`,调用 `Contains` 方法将引发 `NullReferenceException`。因此,在调用 `Contains` 之前,请确保列表不是 `null`。

### 示例

以下是一个使用自定义类型 `Person` 和其 `List` 的示例:


public class Person
{
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person person)
        {
            return Name == person.Name;
        }

        return false;
    }

    public override int GetHashCode()
    {
        return Name.GetHashCode();
    }
}

List<Person> people = new List<Person>
{
    new Person { Name = "Alice" },
    new Person { Name = "Bob" }
};

bool containsAlice = people.Contains(new Person { Name = "Alice" }); // 返回 true

在这个例子中,我们重写了 `Person` 类的 `Equals` 和 `GetHashCode` 方法,以便 `Contains` 方法能够正确地根据 `Name` 属性来判断两个 `Person` 对象是否相等。