我有两个代码示例.第一个不编译,但第二个编译.
代码示例1 (不编译)
public void MyMethod(){
int i=10;
for(int x=10; x<10; x++) {
int i=10; // Point1: compiler reports error
var objX = new MyOtherClass();
}
var objX = new OtherClassOfMine(); // Point2: compiler reports error
}
Run Code Online (Sandbox Code Playgroud)
我理解编译器报告错误的原因Point1.但我不明白为什么它报告错误Point2.如果你说这是因为MSIL中的组织,那为什么第二个代码示例会编译?
代码示例2 (编译)
public void MyMethod(){
for(int x=10; x<10; x++) {
int i=10;
var objX = new MyOtherClass();
}
for(int x=10; x<10; x++) {
int i=10;
var objX = new MyOtherClass();
}
}
Run Code Online (Sandbox Code Playgroud)
如果变量范围的简单规则适用于代码示例2,那么为什么这些规则不适用于代码示例1?
例如:
if ( this.IsValid )
{
Matrix matrix = new Matrix();
}
Matrix matrix = new Matrix();
Run Code Online (Sandbox Code Playgroud)
编译器警告我说:
"名为' matrix'的局部变量不能在此范围内声明,因为它会给' matrix' 赋予不同的含义,' '已在'子'范围内用于表示其他内容.
这些变量不是在不同的范围内,所以我无法matrix从if语句外部访问第一个吗?