300x250
LINQ의 SelectMany()
는 굉장히 유용하지만, 생각보다 에러도 자주 난다.
📚 목차
1. NullReferenceException
가장 자주 나오는 에러.
var result = customers.SelectMany(c => c.Orders);
만약 어떤 고객의 Orders
가 null
이면?
⚠️ 오류 메시지
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
'Languague > C#' 카테고리의 다른 글
[C# LINQ] Join vs GroupJoin 차이점 (0) | 2025.04.10 |
---|---|
[C# LINQ] GroupJoin 사용법, null 처리(System.NullReferenceException: 'Object referenc (0) | 2025.04.09 |
[C# LINQ] Join 사용법 null 오류 발생 시 해결법 알아보기(System.NullReferenceException) (0) | 2025.04.08 |
[C# LINQ] 중복된 값으로 리스트 묶기 – GroupBy 사용법(Group By 여러개) (0) | 2025.04.02 |
[C#] LINQ Select vs SelectMany 완전 정리 (차이점, 예제) (0) | 2025.04.01 |