早些时候我遇到了一个问题,我发现了一些奇怪的C#行为。
这将引发错误:
public class MyClass
{
public int MyMethod()
{
for(int x = 0; x < 1; x++)
{
for(int x = 0; x < 1; x++)
{
}
}
}
}
但这不会:
public class MyClass
{
public int x = 0;
public int MyMethod()
{
for(int x = 0; x < 1; x++)
{
}
}
}
相反,当for循环结束时,x将被设置回0.如果你有一个int x
和一个bool x
,这也会有效。
为什么这样做?
答案 0 :(得分:7)
在第一种情况下,您在同一范围内定义同一个变量,两次,这是一个错误。
在第二种情况下,您将在循环范围内定义局部变量,这将隐藏该范围内的类成员x
。在该范围之外,x将引用类成员,但在其中将引用循环迭代变量。