.net - strange variable in lambda in foreach loop -
please refer question captured variable in loop in c#
i want ask why variable behaves strange?
static void main(string[] args) { int[] numbers = new int[] { 1, 2, 3 }; list<action> lst_want = new list<action>(); foreach (var currnum in numbers) { //--------- strange part ------------- int holder = currnum; lst_want.add(() => { console.writeline(holder); }); } foreach (var want in lst_want) want(); console.writeline("================================================"); list<action> lst_dont_want = new list<action>(); foreach (var currnum in numbers) { lst_dont_want.add(() => { console.writeline(currnum); }); } foreach (var dont_want in lst_dont_want) dont_want(); console.readkey(); } the final output is:
1
2
3
--
3
3
3
all of lambda expressions sharing same currnum variable.
after loop finishes, variable 3.
by using separate variable declared inside loop, you're forcing each lambda expression use own variable doesn't change.
Comments
Post a Comment