i
is still a value type, that never changes. Which highlights another issue I have with the explanation as provided. Using the word “reference” in a confusing way. Anonymous methods capture their enclosing scope, so i
simply remains in-scope for all calls to those functions, and all those functions share the same enclosing scope. It never changes from being a value type.
For what it’s worth, in that specific example at least JSON parsing has been available as part of the base .NET libraries since .NET 3.