.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