Using a variable name used in a child scope [duplicate]
I've been wondering why in C# using a variable name used previously in a child scope is not allowed. Like this:
if (true)
{
int i = 1;
}
int i = 2;
Compiling the above code produces an error:
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
And yet you can't use the variable defined in child scope either. The code above works just fine in Java and I can see no reason why it doesn't in C# too. I'm sure there's a good reason, but what is it?
Solution 1:
It is a design choice made by the designers of C#. It reduces potential ambiguity.
You can use it in one of the two places, inside the if or outside, but you can only define it in one place. Otherwise, you get a compiler error, as you found.
Solution 2:
Something I noticed that was not noted here. This will compile:
for (int i = 0; i < 10; i++)
{
int a = i * 2;
}
for (int i = 0; i < 5; i++)
{
int b = i * 2;
}
Taken together, these design decisions seem inconsistent, or at least oddly restrictive and permissive, respectively.