1. 열거 데이터 삭제
- 열거 데이터에서 삭제를 하는 경우 예외가 발생합니다.
- 요소의 개수가 변경이 되는 경우 예외가 발생합니다.
static void Main(string[] args)
{
var list = new List<int> { 1, 2, 3, };
foreach (var item in list.Where(c=>c>1))
{
list.Remove(item);
}
}
2. 열거 데이터 변경
- 열거 객체가 변하지 않고 객체 안에 있는 내용만 달라지는 것은 상관없습니다.
- Where 메서드는 내용을 먼저 읽지 않습니다.
- 중간에 값이 바뀌더라도 예외 발생하지 않습니다.
static void Main(string[] args)
{
int[] array = { 1, 2, 3};
foreach (var item in array.Where(c=>c>1))
{
Console.WriteLine(item);
array[2] = 1;
}
}
3. 정리
- 컬렉션의 요소 개수가 달라지는 경우에는 예외가 발생합니다.
- 컬렉션의 요소의 값이 달라지는 경우에는 예외가 발생하지 않을 수 있습니다.
- 열거 중 중간에 값이 바뀌어도 예외 발생하지 않아도, 처리가 복잡해지기 때문에 지양해야합니다.
- 컬렉션 변경이 필요한 경우 복사본을 만들어, 열거할 객체, 변경할 객체를 나누어 관리합니다.
'프로그래밍 > (도서)C#코딩의기술-실전' 카테고리의 다른 글
[C#] 코딩의기술(실전편) - 그 외, 챕터 별 간단 정리 (0) | 2022.03.31 |
---|---|
[C#] 코딩의기술(실전편) - 4.1 var VS object VS dynamic (0) | 2022.03.31 |
[C#] 코딩의기술(실전편) - 3.12 First메서드 VS Take메서드 (0) | 2022.03.31 |
[C#] 코딩의기술(실전편) - 3.7 Cast VS OfType (0) | 2022.03.31 |
[C#] 코딩의기술(실전편) - 3.5 짧은쿼리 VS 긴 쿼리 (0) | 2022.03.31 |