C# 배열과 List, 왜 .ToList()가 필요할까
문제 상황
필드는 배열로 선언돼 있는데, 메서드는 리스트를 받는다.
// 필드 선언부: 배열
private string[] OutProcessCd = { "PR002", "PR003", "PR006", "PR007", "PR008" };
// 메서드 파라미터: 리스트
public DataTable Select_Process(List<string> processCds = null, bool all_Yn = false)
OutProcessCd를 그대로 넘기면 타입이 안 맞아서 컴파일 에러가 난다.
왜 다른 타입인가
| 타입 | 예시 |
|---|---|
string[] (배열) |
{ "PR002", "PR003" } — 크기 고정 |
List<string> (리스트) |
new List<string> { "PR002", "PR003" } — 크기 가변 |
배열은 선언 시점에 크기가 고정되고, 리스트는 요소를 추가/삭제할 수 있다. 서로 다른 타입이라 암묵적으로 변환되지 않는다.
해결: .ToList()
LINQ가 제공하는 .ToList()로 배열을 리스트로 바꿔주면 된다.
string[] arr = { "A", "B", "C" };
List<string> list = arr.ToList(); // 배열 → 리스트 변환
즉 Select_Process(OutProcessCd.ToList())처럼 호출 지점에서 타입만 맞춰주면 끝이다.
한 줄 요약
배열과 리스트는 다른 타입이다. .ToList()는 그 차이를 메워주는 변환 메서드일 뿐, 복잡한 로직이 아니다.