본문 바로가기
C#/List

[C#] List 검색 메서드 (Contains(), Exists(), Find())

by 스누누피 2025. 1. 9.

C# List는 List에 특정 값이 존재하는지 확인하는 메서드가 여러개 있다.

그중 Contains(), Exists(), Find()에 대해 알아보겠다.

 

 Contains vs Exists vs Find 

List<T>.Contains(T)

단순히 매개변수의 내용을 포함하는 요소가 List<T>에 있는지 여부를 확인한다.

있으면 True, 없으면 False를 반환한다.

List<T>.Exists(Predicate<T>)

특정 값을 찾기 위한 조건과 일치하는 요소가 List<T>에 포함되어 있는지 여부를 확인한다.

있으면 True, 없으면 False를 반환한다.

List<T>.Find(Predicate<T>)

특정 값을 찾기 위한 조건과 일치하는 요소가 List<T>에 처음으로 검색된 요소를 반환한다.

검색되지 않으면 T형식의 기본값이 반환된다.


아래 클래스는 이번 예시에 사용된 간단한 비즈니스 오브젝트다.

  • PartId는 part를 구별하는데 사용되고, part 이름은 변경 가능하다.
  • ToString을 override해주어서 출력값이 보기 편하도록 처리하였다.
public class Part : IEquatable<Part>
{
    public string PartName { get; set; }
    public int PartId { get; set; }

    public override string ToString()
    {
        return $"ID: {PartId}  Name: {PartName}";
    }

    public override bool Equals(object obj)
    {
        if (obj == null) return false;
        Part objAsPart = obj as Part;
        if (objAsPart == null) return false;
        else return Equals(objAsPart);
    }

    public override int GetHashCode()
    {
        return PartId;
    }

    public bool Equals(Part other)
    {
        if (other == null) return false;
        return (this.PartId.Equals(other.PartId));
    }
}

static void Main(string[] args)
{

    List<Part> parts = new List<Part>();

    parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
    parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
    parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
    parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
    parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
    parts.Add(new Part() { PartName = "shift lever", PartId = 1634 });

    Console.WriteLine();
    foreach (Part aPart in parts)
        Console.WriteLine(aPart);
}

// 출력 결과
//
// ID: 1234  Name: crank arm
// ID: 1334  Name: chain ring
// ID: 1434  Name: regular seat
// ID: 1444  Name: banana seat
// ID: 1534  Name: cassette
// ID: 1634  Name: shift lever

 

 Contains( ) 

PartId가 1734인 Part가 있는지 확인해 보았다.

PartId가 1734인 Part는 없기 때문에 False를 반환한다.

Console.WriteLine($"Contains: Part with Id=1734 {parts.Contains(new Part { PartId = 1734, PartName= ""})}");

// 출력 결과
// Contains: Part with Id = 1734 False

 

 Exists( ) 

PartId가 1444인 Part가 있는지 확인해 보았다.

PartName = "banana seat", PartId = 1444인 Part가 있기 때문에 True를 반환한다.

Console.WriteLine($"Exists: Part with Id=1444: {parts.Exists(x => x.PartId == 1444)}");

// 출력 결과
// Exists: Part with Id = 1444: True

 

 Find( ) 

PartName이 "seat"를 포함하는지 확인해 보았다.

"seat"를 포함하는 가장 첫번째 요소인 PartName = regular seat의 Part가 반환되었다.

Console.WriteLine($"\nFind: Part where name contains \"seat\": {parts.Find(x => x.PartName.Contains("seat"))}");

// 출력 결과
// Find: Part where name contains "seat": ID: 1434  Name: regular seat

 

 


참고 자료

https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.exists?view=net-8.0

https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.contains?view=net-8.0

https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.find?view=net-8.0

'C# > List' 카테고리의 다른 글

[C#] List 메서드 모음  (0) 2024.07.17