В первом варианте
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 гарантированно инициализировано