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?
Do not use the same variable name in two scopes where one scope is contained in another. For example, No other variable should share the name of a global variable if the other variable is in a subscope of the global variable.
The local variable declaration space of a block includes any nested blocks. Thus, within a nested block it is not possible to declare a local variable with the same name as a local variable in an enclosing block. Essentially, it's not allowed because, in C#, their scopes actually do overlap.
C# Class Level Variable Scope In C#, when we declare a variable inside a class, the variable can be accessed within the class. This is known as class level variable scope. Class level variables are known as fields and they are declared outside of methods, constructors, and blocks of the class.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With