너 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를 이용한다