为什么foreach循环中的局部变量与循环外声明的变量冲突?

Rya*_*yan 3 c#

鉴于此代码:

List<string> things = new List<string>();

foreach (string thing in things)
{
    string foo = thing.ToUpper();
}

string foo = String.Empty;
Run Code Online (Sandbox Code Playgroud)

为什么编译器会抱怨foo被声明了两次?当然,在foreach循环中声明的实例仅在循环范围内有效吗?

Joe*_*oey 5

虽然你只能foo在声明它之后引用外部,但是在函数的开头分配本地,这意味着内部foo将覆盖外部,即使它尚未被声明.