Одинаковые имена в разных блоках в C#
Два соседних блока не делят одну область.
В каждом можно объявить свою переменную
num:
{
int num = 1;
Console.WriteLine(num); // prints 1
}
{
int num = 2;
Console.WriteLine(num); // prints 2
}
То же имя в разных ветках одного if
тоже допустимо, потому что ветки не выполняются
одновременно и их области не пересекаются:
bool test = true;
if (test) {
int num = 1;
Console.WriteLine(num); // prints 1
} else {
int num = 2;
Console.WriteLine(num); // prints 2
}
Если внешний блок уже объявил num,
повторное объявление во вложенном блоке
в C# запрещено:
int num = 1;
if (true) {
int num = 2; // error
}
Чтобы изменить внешнее значение, используют присваивание без нового объявления:
int num = 1;
if (true) {
num = 2;
}
Console.WriteLine(num); // prints 2
Определите, соберется ли программа:
for (int i = 0; i < 2; i++) {
int val = i;
}
for (int i = 0; i < 3; i++) {
int val = i;
}
Определите, соберется ли программа:
int val = 0;
for (int i = 0; i < 3; i++) {
int val = i;
}