Почему C# не видит переменную внутри switch?
Вам четко написали что используется не назначенная переменная. Ткнете по ошибке вас перекинет на нее 



int a = 1;
            int b ;
            switch (a)
            {
                case 1:
                    b = 100;
                    Console.WriteLine("изнутри " + b);
                    break;
                default:
                    b = 0;
                    break;
            }
            Console.WriteLine("снаружи " + b);
В первом варианте
int a=1;
    int b; //не инициализировано
    switch(a){
      case 1:
        b=100;
        Console.WriteLine ("изнутри "+b);
        break;
    }//если a != 1, то b всё ещё не инициализировано
    Console.WriteLine ("снаружи "+b); //<-тут ошибка
Как вариант, если не хочется инициализировать b сразу, то можно добавить ветку default в switch:
int a=1;
    int b;
    switch(a){
      case 1:
        b=100;
        Console.WriteLine ("изнутри "+b);
        break;
       default:
         b = -1;
         break;
    }
    Console.WriteLine ("снаружи "+b);

Ещё я бы посоветовал использовать switch-expression из C# 8 - он сразу исключает такой класс ошибок

var a = 1;
var b = a switch {
   1 => 100,
   _ => -1 // Если не добавить эту ветку, то будет ошибка, что switch-expression покрывает не все возможные варианты
};
//b гарантированно инициализировано