본문 바로가기
개발/기본) 기본기

기본기)List Loop in remove elements

by 테샤르 2021. 2. 6.

List Loop in remove elements

 

c#에서 List를 Loop 하는 과정에서 Remove를 하게 되면 

인덱스 에러가 발생하는데 List를 ToArray를 사용해서 List를 인스턴스 시킨 상태로 삭제를 하는 것을 보게 되어서 포스팅하게 되었다.

  foreach (var item in destroyList.ToArray())
  {
  	destroyList.Remove(item);
  }

Microsoft List<T>ToArray : [링크]

 

List.ToArray 메서드 (System.Collections.Generic)

List의 요소를 새 배열에 복사합니다.Copies the elements of the List to a new array.

docs.microsoft.com

개인적으로는 ToArray를 통해서 메모리를 인스턴스 시킨 이 후에 사용하는 것을 비추한다.(효율성이 낮지만 성공한 경우에만 제거한다든지 그런 특정 조건에서만) 실제 새 배열을 만드는 과정이 포함되어있어서. 순차적인 루프인 경우에는 Loop Index를 역으로 처리하는 방식 or Linq를 사용해서 Where을 통한 특정 데이터 제거하는 방식을 기본적으로 추천한다.

list.RemoveAll(p=>p.Delete);

 

stackoverflow : [링크]

 

How to remove elements from a generic list while iterating over it?

I am looking for a better pattern for working with a list of elements which each need processed and then depending on the outcome are removed from the list. You can't use .Remove(element) inside a

stackoverflow.com

 

 

 

반응형

댓글