본문 바로가기
프로그래밍

C# Unity for 문에서 AddListener 람다식에 변수 사용 시 문제

by ryanlion 2022. 5. 14.
for (int i = 0; i < buttons.Count; ++i)
{
	buttons[i].onClick.AddListener(() => OnButtonClicked(i));
}

 

대략 위와 같은 코드로 작성 했는데

실제 OnButtonClicked()에서 전달되는 파라미터는 마지막 i의 값만 전달되는 문제가 있다.

찾아보니, 람다식은 실제로 실행되기 전에는 매개변수를 참조형태로 가지고 있어서

실행 시에는 마지막 i 값이 전부 들어가게 되는 문제이다.

 

아래와 같이 수정하여 문제를 해결할 수 있다.

 

for (int i = 0; i < buttons.Count; ++i)
{
	int temp = i;
	buttons[i].onClick.AddListener(() => OnButtonClicked(temp));
}

 

매 반복 마다 변수를 새로 생성하여 넣는 방식이다.

또는 숫자를 하드코딩하여 해결할 수도 있다.

반응형