Bugs can be a lot of things, even language design and semantics can be riddled with "bugs". This is just one example of how unintuitive things can get when lambda functions are implemented the "wrong" way. The problem is that the runtime doesn't capture the dynamic environment when the lambda function "Console.WriteLine(...)" is created, which would be what I believe is the intuitive thing to do. If lambda functions had been implemented "the right way", the dynamic environment as it existed when the lambda function was defined would have been preserved.