Dictionary에 담은 원소들을 한개씩 삭제해가면서 삭제가 성공하면
다른 리스트에 담는 방식을 구현해야하는 경우가 있다.
public Dictionary<int, int> temporalItemDic;
public void InventoryFinalize()
{
foreach (var item in temporalItemDic)
{
if (temporalItemDic.Remove(item.Key))
AddItem(item.Key, item.Value);
}
}
하지만, 위와 같은 enumeration에서 원소삭제는 Exception오류를 일으킨다!
이런 문제 때문에 리스트 등에서는 for문으로 맨 뒤에서부터 체크해야한다.
for (int i = monsterList.Count - 1; i >= 0; i--)
{
if (monsterList[i] == null || monsterList[i].IsAlive == false)
monsterList.RemoveAt(i);
}
혹은 LINQ를 사용하여 새로운 리스트를 소팅하고 덮어쓰는 방법도있다.
monsterList = monsterList.Where(n => n != null && n.IsAlive == true)
.ToList();
사실 LINQ가 있다면 Dictionary 뒤에 바로 .ToList()로 새로운 리스트로 만들어 버릴 수 있다.
때문에, 다음과 같이 처리할 수도있다!
public Dictionary<int, int> temporalItemDic;
public void InventoryFinalize()
{
foreach (var item in temporalItemDic.ToList()) // ToList()
{
if (temporalItemDic.Remove(item.Key))
AddItem(item.Key, item.Value);
}
}
'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글
C# 배열 연속 데이터 채우기 Enumerable.Range (0) | 2021.04.23 |
---|---|
C# 인덱서 Indexer (0) | 2020.07.13 |
C# params 키워드 : 가변 개수의 인수 (0) | 2019.12.13 |
Construct (생성자) 오버로딩 (0) | 2019.12.12 |
ReadOnlyCollection (0) | 2019.12.12 |