There are already some good answers but I gave a look to the C# 4 language specs to clarify this.
We can read in §1.24 about scopes:
Scopes can be nested, and an inner scope may redeclare the meaning of a
name from an outer scope (this does not, however, remove the
restriction imposed by §1.20 that 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).
And this is the cited part in §1.20:
A declaration defines a name in the declaration space to which the
declaration belongs. Except for overloaded members (§1.23), it is a
compile-time error to have two or more declarations that introduce
members with the same name in a declaration space. It is never
possible for a declaration space to contain different kinds of members
with the same name
[...]
Note that blocks that occur as or within the body of a function member
or anonymous function are nested within the local variable declaration
space declared by those functions for their parameters.