开发者

Using a variable name used in a child scope [duplicate]

This question already has answers here: C# variable scoping: 'x' cannot be declared in this scope because it would give a different meaning to 'x' (3 answers) Closed 8 years ago.

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 t开发者_如何学Pythono 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?


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.


As Adam Crossland said, it's a design choice - Made to make sure you (or more likely, your fellow developers) dont misunderstand the code.

You often see private instance members prefixed with a "m_" or "_" (eg. _myVar or m_myVar) to avoid confusion..


to all probability, any variable created in any of the child scope, will be put on the stackframe the moment method is entered.

This way, a similar name in a child scope can not co-exist with a variable name in another child scope.

They could have worked around this of course if they wanted, so I guess it ultimately has to do with design as well.. this way there is less chance for error

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜