Languague/C# / / 2025. 4. 8. 22:39

[C# LINQ] SelectMany 오류 총정리 – NullReferenceException, InvalidOperationException, ArgumentNullException,CS1929

300x250

LINQ의 SelectMany()는 굉장히 유용하지만, 생각보다 에러도 자주 난다.

 


📚 목차

1. NullReferenceException

2. InvalidOperationException

3. ArgumentNullException

4. 컴파일 오류 CS1929

5. 마무리


1. NullReferenceException

가장 자주 나오는 에러.

var result = customers.SelectMany(c => c.Orders);

만약 어떤 고객의 Ordersnull이면?

 

⚠️ 오류 메시지

System.NullReferenceException: 'Object reference not set to an instance of an object.'

 

✅ 해결 방법

// 1. null 체크
customers.Where(c => c.Orders != null)
         .SelectMany(c => c.Orders);

// 2. ?? 연산자로 대체
customers.SelectMany(c => c.Orders ?? new List<Order>());

→ 리스트가 null이어도 에러 없이 실행됨


2. InvalidOperationException

SelectMany() 안에서 First(), Single() 쓸 때 조건이 없으면 발생

var result = customers.SelectMany(c =>
    c.Orders.Select(o => o.Details.First(d => d.Price > 1000))
);

 

⚠️ 오류 메시지

System.InvalidOperationException: Sequence contains no matching element

→ 조건을 만족하는 값이 없는데 First()로 꺼내려 할 때 발생

 

✅ 해결 방법

// 조건 만족 안 해도 null 반환
c.Orders.Select(o => o.Details.FirstOrDefault(d => d.Price > 1000));

→ 이후 ?. 또는 null 체크 필수


3. ArgumentNullException

컬렉션이 null인데 SelectMany()에 넘기면 발생

customers.Add(new Customer { Name = "이철수", Orders = null });

var result = customers.SelectMany(c => c.Orders);

 

⚠️ 오류 메시지

System.ArgumentNullException: Value cannot be null. (Parameter 'source')

 

✅ 해결 방법

// null 일 경우 빈 리스트로 대체
.SelectMany(c => c.Orders ?? new List<Order>())

ArgumentNullException은 컬렉션 자체가 null일 때


4. 컴파일 오류 CS1929

컬렉션이 아닌 값에 SelectMany()를 사용했을 때 발생

var numbers = new List<int> { 1, 2, 3 };
var result = numbers.SelectMany(n => n); // ❌

 

⚠️ 오류 메시지

CS1929: 'int' does not contain a definition for 'SelectMany'

 

✅ 해결 방법

var result = numbers.SelectMany(n => new[] { n }); // ✅

SelectMany() 안에서는 컬렉션을 반환해야 함


5. 마무리

SelectMany()는 정말 자주 쓰이는 만큼, 자주 실수하는 메서드이기도 하다.

  • NullReferenceException → 컬렉션 null 여부 확인
  • InvalidOperationException → First()는 조심해서 사용
  • ArgumentNullException → SelectMany 대상이 null일 때
  • CS1929 → 컬렉션 아닌 값을 반환해서 발생

 

알고 보면 별거 아니니 잘써보기 !!!

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