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));
}
매 반복 마다 변수를 새로 생성하여 넣는 방식이다.
또는 숫자를 하드코딩하여 해결할 수도 있다.
반응형
'프로그래밍' 카테고리의 다른 글
자바 이클립스 콘솔 창 한글 깨짐 문제 한번에 해결 (0) | 2022.08.31 |
---|---|
오류 - 인증서 저장소에서 매니페스트 서명 인증서를 찾을 수 없습니다. (0) | 2020.06.18 |