Iterator variable get out of scope in C#
c#, compiler-errors
Solution
This rule, along with several other related rules, is discussed in this blog post of Eric Lippert's.
The particular rule being violated here is:
2) It is illegal to have two local variables of the same name in the same local variable declaration space or nested local variable declaration spaces.
Of particular note, as to why the rules exist is the following paragraph:
the purpose of all of these rules is to prevent the class of bugs in which the reader/maintainer of the code is tricked into believing they are referring to one entity with a simple name, but are in fact accidentally referring to another entity entirely. These rules are in particular designed to prevent nasty surprises when performing what ought to be safe refactorings.
By allowing what you've described it could result in seemingly benign refactors, such as moving the `for` loop to after the other declaration, to result in vastly different behavior.
Problem
Why if I write this in C#: ``` for(int myVar = 0; myVar<10; myVar++) { //do something here } //then, if I try: int myVar = 8; //I get some error that the variable is already declared. //but if I try: Console.WriteLine(myVar); //then I get the error that the variable is not declared. ``` A little confusing I most say. Does anyone know why C# compiler does it?