지난 포스트에 이어서... var list = new List<int>(10); var menu = new ToolStripMenuItem("메뉴"); for(int i=0; i<list.Count; i++) { var subMenu = new ToolStripMenuItem("메뉴 항목"); subMenu.Click += ( (sender, args)=>{ subMenu_Click(sender, i); } ); // closure
} void subMenu_Click(object sender, int idx) { MessageBox.Show(string.Format("{0}이 클릭됨", idx)); }
예상되는 결과는? i번째 subMenu를 누르면 i가 출력되지 않는다.
다음과 같이 변수를 한 번 복사하는 게 해결책이다:
for(int i=0; i<list.Count; i++) { var subMenu = new ToolStripMenuItem("메뉴 항목");
int j=i; // 이거면 되지 않을까 했는데 진짜 됐음-_-乃 subMenu.Click += ( (sender, args)=>{ subMenu_Click(sender, j); } ); // closure
}