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

3

考虑以下代码:

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

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

string foo = String.Empty;

为什么编译器抱怨 foo 被声明两次?难道在 foreach 循环中声明的实例只在循环范围内生效吗?

http://blogs.msdn.com/b/ericlippert/archive/tags/declaration+spaces/ - CodesInChaos
我认为当你考虑到变量捕获时,你的论点就不成立了。 - David Heffernan
2
这个问题至少有半打的重复。一个例子:.NET如何处理作用域内的变量 - CodesInChaos
1个回答

5

在声明foo之后,你只能引用外部的foo,而局部变量是在函数开头分配的,这意味着即使内部的foo尚未被声明,它也会掩盖外部的foo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接