Вытащить переменную из if за его пределы

Скрин ошибки:Имеется простенькая конструкция:

if (x==5)
{
   y=6
}
Console.WriteLine(y) // ошибка

Мне очень важно вытащить значение “y” конкретно из-под if, вне ее я могу только объявить, но значение нужно под if

Как это можно сделать? Уже все перепробовал(


Ответы (1 шт):

Автор решения: aepot

Вижу, что у вас уже все получилось, но я добавлю объяснение происходящему.

Дело в том, что если случится так, что y не будет равно 5, то выводить в консоль будет нечего, так как y на тот момент будет "ничем". Технически внутри этой переменной может оказаться что угодно, что лежало в том участке оперативной памяти, которое ей выделено при объявлении. То есть можно получить непредсказуемый результат. И чтобы защитить вас от подобного рода примитивных непредсказуемостей, компилятор запрещает вам использовать переменную с неприсвоенным значением на основе анализа вашего кода.

Есть несколько способов устранить эту неприятность:

  1. присвоить ей что-нибудь при объявлении

    int y = 0;
    int x = 5;
    if (x==5)
    {
       y = 6;
    }
    Console.WriteLine(y);
    
  2. использовать переменную внутри условного оператора

    int y;
    int x = 5;
    if (x==5)
    {
       y = 6;
       Console.WriteLine(y);
    }
    
  3. Сделать ветвление условного оператора так, чтобы значение присваивалось в любом случае

    int y;
    int x = 5;
    if (x==5)
    {
       y = 6;
    }
    else
    {
       y = 0;
    }
    Console.WriteLine(y);
    
  4. Способ для тех, кто знаком с исключениями: бросить исключение

    int y;
    int x = 5;
    if (x==5)
    {
       y = 6;
    }
    else
    {
       throw new Exception("x не равно 5!");
    }
    Console.WriteLine(y);
    
→ Ссылка