Переменная внутри условия в C#
Пусть для простоты условие всегда истинно:
if (true) {
}
Рассмотрим такой код:
if (true) {
int res = 1;
}
Console.WriteLine(res); // error
В переменную res должно записаться значение
1, но программа не собирается. Переменные,
объявленные внутри фигурных скобок, видны только
внутри этих скобок и не видны снаружи.
Если переменная объявлена снаружи скобок, она видна и внутри блока, и снаружи:
int res;
if (true) {
res = 1;
}
Console.WriteLine(res); // prints 1
В следующем примере в каждой ветке объявляют
свою res, а снаружи пытаются вывести имя
res:
int num = 5;
if (num >= 0) {
int res = 1;
} else {
int res = 2;
}
Console.WriteLine(res); // error
Снова ошибка сборки: ни одна из переменных
res не выходит за пределы своей ветки.
Объявим одну переменную снаружи условия
и запишем в нее значение внутри веток:
bool test = true;
int res;
if (test) {
res = 1;
} else {
res = 2;
}
Console.WriteLine(res); // prints 1
В C# нельзя повторно объявить имя внутри блока, если такое имя уже занято внешней локальной переменной. Вместо второго объявления нужно менять уже существующую переменную присваиванием:
int res = 1;
if (true) {
res = 2;
}
Console.WriteLine(res); // prints 2
Автор приведенного ниже кода хотел выполнить
проверку возраста на достижение 18
лет. Код не работает. Исправьте ошибку автора:
int age = 17;
if (age >= 18) {
bool adult = true;
} else {
bool adult = false;
}
Console.WriteLine(adult);
Автор кода объявил adult снаружи условия,
но внутри веток снова объявил локальные
adult. Исправьте код так, чтобы значение
записывалось во внешнюю переменную:
int age = 17;
bool adult;
if (age >= 18) {
bool adult = true;
} else {
bool adult = false;
}
Console.WriteLine(adult);