.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.

eric lippert explains this.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -