너 C# 완벽해?

C# List<T> 값 복사

대마법사(진) 2024. 11. 7. 00:15

문제발생

List인 originPatrolPoint값을 복사하여 모두 선회하면 다시 List를 초기화 해줘 반복적으로 순찰 포인트를 돌게 하려고 했었다. 그런데 자꾸 오류남;;;

[SerializeField] private List<Transform> originPatrolPoint;
private List<Transform> patrolPoint;

    private Transform GetRandomPoint()
    {
        if (patrolPoint.Count == 0)
        {//포인트를 다돌면 리셋하여 반복
            patrolPoint = originPatrolPoint;//요기!
        }
        int index = UnityEngine.Random.Range(0, patrolPoint.Count);
        Transform point = patrolPoint[index];
        patrolPoint.RemoveAt(index);
        Debug.Log("GetRandomPoint");
        return point;
    }

 


ListA=ListB 는 값을 복사하지 않고 같은 메모리 주소값을 갖게된다. 

그래서 patrolPoint.RemoveAt(Index)를 하면 OriginPatroPoint에서도 값이 삭제가 되어 어느순간 아무것도 남지 않게된다.

(되게 간단한건데 여태까지 인지하지 못하고있었다.. 기초가 아직 부족하구나...)

해결방법

//방법 1
ListA = new List<T> (ListB);
patrolPoint = new List<T>(originPatrolPoint);

//방법 2
ListA = ListB.ToList();
patrolPoint = originPatrolPoint.ToList();
  • patrolPoint 를 새로 생성해준다.
  • ToList를 이용한다