Languague/C# / / 2025. 4. 18. 08:00

[C# LINQ] 리스트 포함 여부 확인하기 – Contains vs Any vs Join

300x250

목차

  1. Contains()는 언제 쓰나?
  2. Any()는 어떤 상황에서 좋을까?
  3. Join으로 리스트 비교하기
  4. Contains vs Any vs Join – 언제 뭘 써야 할까?
  5. 자주 나는 오류들 정리

1. Contains()는 언제 쓰나?

Contains()는 리스트에 특정 값이 포함되어 있는지 확인할 때 사용된다.

var ids = new List<int> { 1, 3, 5 };
bool exists = ids.Contains(3);

✔ 결과: true


📌 실무 예제

var allowedRoles = new List<string> { "Admin", "Manager" };

if (allowedRoles.Contains(user.Role))
{
    Console.WriteLine("접근 허용!");
}

→ 간단한 값 비교에는 Contains가 제일 편해요.
 


2. Any()는 어떤 상황에서 좋을까?

Any()는 리스트 안에서 조건을 만족하는 항목이 하나라도 있으면 true를 반환한다.

var users = new List<User> {
    new User { Name = "철수", Age = 25 },
    new User { Name = "영희", Age = 31 }
};

bool hasAdult = users.Any(u => u.Age >= 30);

✔ 결과: true (영희는 31세니까!)


🧾 실제로는 자식 컬렉션 안에 원하는 게 있는지 볼 때 좋다!

if (order.Items.Any(i => i.ProductId == 101))
{
    Console.WriteLine("해당 상품이 포함되어 있음!");
}

 
 


3. Join으로 리스트 비교하기

두 리스트를 비교해서 겹치는 값만 보고 싶을 때 Join()을 쓴다.

var listA = new List<int> { 1, 2, 3 };
var listB = new List<int> { 2, 3, 4 };

var common = listA.Join(listB, a => a, b => b, (a, b) => a).ToList();

foreach (var item in common)
{
    Console.WriteLine(item);
}
2
3

→ 두 리스트에 모두 있는 값만 추출된다
 


4. 언제 어떤 걸 써야 할까?

  • 값 리스트 포함 여부Contains()
  • 조건 만족 여부Any()
  • 두 리스트 비교Join()

성능 팁

Contains()에 큰 리스트 넣으면 느려질 수 있다. 그럴 땐 HashSet으로 변경 가능하다.

var idSet = new HashSet<int>(ids);

if (idSet.Contains(someId)) { ... }

 


5. 자주 나는 오류들 정리

❌ ArgumentNullException

List<int> numbers = null;
bool check = numbers.Contains(3); // 여기서 오류!

→ 리스트가 null이면 Contains, Any, Join 다 터집니다. null 체크는 무조건  필수!


❌ NullReferenceException

if (order.Items.Any(i => i.Name.Contains("상품")))
{
    // Items가 null이면 여기서 터짐
}

order.Items ?? new List<Item>() 이렇게 처리하면 예방된다.


✅ 마무리 요약

  • Contains() – "그 값이 있나?" → 제일 간단
  • Any() – "조건 맞는 항목 있나?" → 유연하게 쓰기 좋아요
  • Join() – "두 리스트 비교해서 겹치는 거 뽑고 싶을 때"

 

300x250
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유