У меня есть два примера кода. Первый не компилируется, но второй делает.
Пример кода 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
}
Я понимаю, почему компилятор сообщает об ошибке в 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();
}
}
Если простые правила области видимости переменной применяются в примере кода 2, то почему эти правила не применяются к Code Sample 1?