odd lambda behavior

时光怂恿深爱的人放手 提交于 2019-12-04 02:54:17

This is because of variable capturing in C# that can be a little tricky

In a nutshell, Each loop of the for loop is referring to the same variable i so the compiler uses the same lambda expression for all loops.

If it is any consolation, This oddity is worse in javascript as javascript only has function scopes for variables so even your second solution won't do what you expect it to.

This is also a very good explanation

@Eric Lippert has explained this in great detail in his two-parts article:

It is a must-read article, as it explains the behavior in depth and at implementation-level.

Yes.

In Test One the var i is captured in the loop, but i refers to a variable that is effectively declared once outside the loop, so all of the captured lambdas refer to the one variable. By the time you call the actions the value of i is 5 so all of the output is five.

In Test Two the var j is captured in the loop, but in this case j is declared each time inside the loop, so all of the captured lambdas refer to the distinct variables. So calling the lambdas outputs the distinct values.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!